Обновить
128K+

Качество кода *

Как Макконнелл завещал

98,88
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Гексагональная архитектура и DDD на опыте интернет-магазина Спортмастер. Как дела с кодом?

Время на прочтение5 мин
Охват и читатели9.1K

В предыдущих двух постах (раз, два) мы разобрали, какие проблемы решает гексагональная архитектура и как выглядит архитектура у нас в проекте. Теперь давайте посмотрим, как обстоят дела с кодом, который должен поддерживать описанную архитектуру.

Как я уже писал, мы взяли из DDD тактические шаблоны.

Если какое-то понятие предметной области является уникальным и отличным от всех других объектов в системе, то для его моделирования используется сущность.

Такие объекты-сущности могут сильно отличаться своей формой за весь цикл существования. Тем не менее, их всегда можно однозначно идентифицировать и найти по запросу.

Для этого используются уникальные идентификаторы.

Сущность в коде нашего проекта должна иметь:

Читать далее

CI, кодстайл и TDD: обзор практик для повышения качества кода

Время на прочтение8 мин
Охват и читатели12K

Blade Runner 2049, Warner Bros. Pictures

Я видел не во сне, а наяву атакующие корабли, пылающие под четырьмя вложенными if-else, и лучи CI с кучей сканирований у ворот Тангейзера, вызывающие лютую боль разработчиков. Меня зовут Максим Морев, и я техлид в Газпромбанке.

То, что вы сейчас увидите, выросло из внутреннего стайлгайда, к которому мы пришли через тернии многочисленных код-ревью и разработанных сервисов. Я постарался собрать здесь все основные и просто интересные грабли, которые нам попадались, и показать решения с примерами и обзором возможных трудностей в процессе внедрения.

Читать далее

Компонентный подход. Реализуем экраны с помощью библиотеки Decompose

Время на прочтение8 мин
Охват и читатели22K

Это вторая часть из серии статей про компонентный подход. Если вы не читали первую часть Компонентный подход. Боремся со сложностью в Android-приложениях, то рекомендую начать с нее.

Ранее мы обсудили, что компонентный подход — это способ организации приложения в виде иерархии компонентов: UI-элементы ➜ функциональные блоки ➜ экраны ➜ флоу ➜ приложение. Такая структура позволяет эффективно бороться со сложностью экранов и навигации.

Предлагаю опробовать этот подход на практике. Будем использовать библиотеку Decompose для создания простых и сложных экранов. Рассмотрим примеры из реальных приложений. Надеюсь, будет интересно.

Читать далее

Компонентный подход. Боремся со сложностью в Android-приложениях

Время на прочтение10 мин
Охват и читатели17K

Представьте, что вы начали разработку нового Android-приложения. Поначалу особых проблем не будет. Вы реализовали лишь самые базовые функции. Экранов немного, и все они простые. Вам легко ориентироваться в коде. Вы бодро добавляете одну фичу за другой. Но со временем разработка усложняется: кода становится много, главный экран обрастает большим количеством UI-элементов и логики, экраны образуют сложные цепочки переходов. Приходится ломать голову, чтобы добавить что-то новое, не сломав ничего из старого. Скорость разработки падает. Знакомая ситуация?

Существует эффективный способ борьбы со сложностью — компонентный подход. Мы в MobileUp применили его в трех крупных Android-приложениях и теперь не представляем, как жили без него раньше.

Меня зовут Артур, я тимлид в компании MobileUp. Я помогу вам освоить компонентный подход. Постараюсь сделать это как можно проще и увлекательнее.

Вас ждет серия статей. Это первая из них — теоретическая. В ней мы рассмотрим, какие сложности встречаются в Android-приложениях, и почему MVVM и Clean Architecture не панацея против них. Я расскажу, что такое компонентный подход и в чем его преимущества. А в конце статьи будут ссылки на материалы для углубленного изучения.

Читать далее

Честные модули внутри PHP: теперь они существуют

Время на прочтение15 мин
Охват и читатели11K

Низкий порог входа и строгость языка программирования — вещи обычно несовместимые. Потому что ты либо, как Rust, бьёшь по рукам borrow checker’ом — либо, как PHP, позволяешь не задумываться о типах и быстро прототипировать. 

На самом деле, если писать код грамотно, это становится неважным и язык перестаёт иметь значение. Архитектура важнее языка, и хороший код на PHP ничем не отличается от аналогичного кода на любом другом ООП-языке. Другое дело, что возможность «любой домохозяйке» писать на PHP сопровождается и риском наворотить полное неподдерживаемое безобразие. Поэтому нам нужны тайпхинты, линтеры, статические анализаторы и подобные инструменты. 

Но в PHP есть и ещё один изъян: в нём любой класс, функция или константа — глобальны. Можно создать класс из любого места в коде, и нет способа скрыть его или сделать деталью реализации где-то в отдельной папке. Иными словами, в PHP нет того, что в других языках называется модулями.

Наша новая open-source разработка называется Modulite и внедряет в PHP модули. Это сквозная технология: мы внедряемся в IDE, в PHPStan, в KPHP, в CI, в Composer — и делаем так, будто бы модули нативно есть в языке PHP.

Читать далее

Что же такого прекрасного в функциональном программировании?

Время на прочтение18 мин
Охват и читатели22K

Когда слышишь, как некоторые люди говорят о функциональном программировании, можно подумать, что они попали в какую-то секту. Они болтают о том, как оно изменило их способ восприятия кода. Они превозносят преимущества чистоты. И провозглашают, что теперь они способны «рассуждать о коде», как будто весь остальной код иррационален и непонятен. Этого вполне достаточно, чтобы начать относиться ко всему этому скептически.

Однако вы можете задаться вопросом: должна же быть какая-то причина того, почему эти адепты настолько восхищены? По моему личному опыту, интерес к функциональному программированию обретают не ленивые и некомпетентные программисты. [Один из тех, кому я показал эту статью, прореагировал интересным образом. Он сказал что-то вроде: «Вообще-то я люблю функциональное программирование, потому что я ленивый и компетентный. Благодаря нему мне не приходится думать о многих вещах».] Скорее наоборот, осваивать его были склонны самые умные кодеры, которых я знал; люди, сильнее всех стремившиеся писать хороший код. (Хотя они обычно были исследователями.) И это вызывает вопрос: отчего же они все в таком восторге?
Читать дальше →

Что такое service mesh простыми словами

Время на прочтение5 мин
Охват и читатели29K

Всё больше компаний переходят на микросервисы. Такой выбор вполне оправдан: при должной реализации они решают множество проблем монолита. За последние несколько лет микросервисная архитектура сильно эволюционировала и обросла вспомогательными технологиями, одна из которых service mesh. В статье разберём, какую роль service mesh играет в развёртываниях микросервисов и как помогает упростить работу разработчиков.  

Читать далее

Гексагональная архитектура и DDD на опыте интернет-магазина Спортмастер. Пробуем новое

Время на прочтение9 мин
Охват и читатели15K

Привет! Продолжим тему гексагональной архитектуры и DDD, первый пост — здесь

Под катом - вспомним, что из себя представляет гексагональная архитектура, какие основные концепции содержит DDD и как теория, проявляясь в структуре проекта, помогает решить некоторые из описанных в первой части проблем.

Гексагональная архитектура

Одна из самых исчерпывающих статей по гексагональной архитектуре подробно и с примерами раскрывает назначение этой архитектуры. 

Я приведу основные мысли.

Гексагональная архитектура имеет три фундаментальных блока:

Читать далее

Строки кода, которые изменили мир

Время на прочтение13 мин
Охват и читатели54K
image

{"__typename":"PageLikeAction","action_type":"LIKE","label":{"text":"Like"}


В 2009 году Facebook добавила в интерфейс своей социальной сети код, изменивший мир — кнопку «Like». «Лайк» был детищем нескольких программистов и дизайнеров — Лии Перлман и Джастина Розенштейна. Они предположили, что пользователи Facebook часто бывают слишком заняты, чтобы оставлять комментарии к постам своих друзей, и что поэтому им нужна простая кнопка, нажав которую можно было бы дать понять друзьям, что их пост вам понравился. Так оценивать и поощрять друг друга пользователям стало бы легче, а значит и делали бы они это чаще.

Это сработало — и даже слишком хорошо. К 2012 году пользователи прожали «лайк» триллион раз. У этого оказались и побочные эффекты. Многие стали публиковать фото/видео, чтобы потом сидеть и с тревогой обновлять страницу, ожидая, когда же число лайков возрастёт. Все стали гадать, почему кто-то другой получает больше лайков. Люди подсели на иглу одобрения (вместо того, чтобы сесть на чьё-то лицо), что отразилось на их повседневной онлайн-активности: старались публиковать как можно больше постов, чтобы казаться смешнее, умнее, красивее, спортивнее.

Небольшой фрагмент кода, который внёс почти незаметное изменение в пользовательский интерфейс социальной сети, изменил поведение людей. Ниже представлен список из примеров подобных важных фрагментов кода, которые изменили мир. И на самом деле это неполный список, учитывая огромное количество кода, который был написан.
Читать дальше →

Не обманывайте себя: вы не «исправите это потом»

Время на прочтение4 мин
Охват и читатели7.7K
Недавно я одобрил pull request от коллеги с таким описанием: «Сделано костыльно, но мне не хватает сегодня времени реализовать это лучше». И тогда я задумался: когда же будет устранен этот «костыль»? На память приходит много случаев, когда я сам или мои коллеги отправляли в работу код, который нас не вполне устраивал (с точки зрения простоты поддержки, качества, чистоты, из-за проблем с функциональностью, неважного пользовательского опыта и т.д.). С другой стороны, воспоминаний о том, как мы реально возвращались к чему-то и вносили необходимые изменения, у меня гораздо меньше.

Где-то я читал (к сожалению, сейчас не могу найти источник) такую мысль: «Чем дольше что-либо остается неизменным, тем меньше вероятность, что оно изменится в будущем». Иными словами, начиная с того момента, как мы отправили в релиз «костыль», шансы на то, что он будет исправлен, неуклонно снижаются с течением времени. Если сегодня мы его не устраним, завтра вероятность станет ниже. Послезавтра она еще снизится, через неделю – еще, через месяц – еще…

По моим наблюдениям, эта закономерность работает, и, думаю, на то есть несколько причин. Как ни странно, причины эти заключаются не том, что мы лентяи, нам не хватает профессионализма или просто плевать на всё. И даже не в менеджерах продукта, которые злодейски заставляют нас переходить к новой функциональности и не дают ничего чинить. Причин несколько, и они взаимосвязаны.
Читать дальше →

Вам нужен чистый код? Используйте правило шести

Время на прочтение3 мин
Охват и читатели36K

Все хотят писать чистый код. Этому посвящены целые книги.

Но вам не нужно читать книги, чтобы начать писать более чистый код прямо сейчас. Есть одна «хитрость», которой может научиться любой кодер, она делает код гораздо менее запутанным.

Решение таково:

Каждая строка делает только одно действие


Одна строка, одна задача.

Но не стоит слишком перебарщивать.
Читать дальше →

Мысли о разумном Maintainability в этом несовершенном мире

Время на прочтение8 мин
Охват и читатели2.4K

Привет, Хабр! Сегодня мне хотелось бы поговорить о такой интересной метрике, как Maintainability - возможность вести доработки и улучшения при создании сложных систем. Ведь при развитии любого программного продукта возникает вопрос, сколько будет стоить его поддержка и развитие. Мы в Киберпротекте разрабатываем линейку продуктов для защиты данных и сегодня это — миллионы строк кода, требующие ощутимых затрат как на поддержку, так и на расширение возможностей или исправление найденных ошибок. В этой статье я делюсь своими мыслями о том, как оценить Maintainability, из чего она состоит, можно ли ее измерить, и как принимать правильные решения при работе с кодом.

Читать далее

VAOP как low code инструмент для разработки telegram BOT и не только

Время на прочтение19 мин
Охват и читатели3.4K

Contact us: [t.me/evaclick]

Подробнее с "eco-programming & VAOP", можно познакомиться здесь https://vaop.notion.site/eco-programming-VAOP-106f8ec4418d42bdbb5ec371e8ddada9

Когда в апреле 2021 года я опубликовал статью на хабре: Введение в v-agent ориентированное программирование, в которой сформулировал идеологию и заложил основной понятийный аппарат новой методологии программирования: v-agent, va-script, va-box, action, direction и т.п., то напомнил себе изобретателя радио - Сделал Маркони радио, включил, а слушать то нечего. Наверное подобное происходит со всеми пионерами новых методологий программирования.

Еще веселее было с отсутствием тогда убойных примеров применения новой методологии. Тут я, еще раз улыбнулся, вспомнив анекдот про ученого, выступившего на симпозиуме и заявившего, что он изобрел чудо лекарство и осталось только выяснить - от чего же оно лечит?

Читать далее

Ближайшие события

SAST для самых маленьких. Обзор open-source инструментов поиска уязвимостей для C/C++

Время на прочтение33 мин
Охват и читатели42K


Привет, Хабр!


Навыки статического анализа кода в арсенале исследователя безопасности приложений фактически являются must-have скиллом. Искать ручками уязвимости в коде, не прибегая к автоматизации, для небольших проектов вполне быть может и приемлемый сценарий. Но для больших задач с миллионами строк кода — это непозволительная роскошь с точки зрения временных затрат.

Читать дальше →

Ввод-вывод — уже не узкое место

Время на прочтение3 мин
Охват и читатели14K

На собеседованиях с программистами я часто прошу их написать простую программу, подсчитывающую частотность слов в текстовом файле. Это хорошая задача, проверяющая множество навыков, а уточняющие вопросы позволяют зайти на удивление глубоко.

Один из моих уточняющих вопросов такой: «Что является узким местом производительности вашей программы?» Многие отвечают что-то типа «считывание из входящего файла».

На самом деле, написать эту статью меня вдохновил ответ на чей-то вопрос в Gopher Slack: «Я заметил, что много дополнительной работы приходится на разделение строки и тому подобное, но обычно всё это намного быстрее ввода-вывода, поэтому нас это не волнует».

Я не стал спорить… и пока не проанализировал производительность задачи с подсчётом слов, думал так же. Ведь всех нас этому учили, правда? «Ввод-вывод — это медленно».

Но это больше не так! Дисковый ввод-вывод мог быть медленным 10-20 лет назад, но 2022 году последовательное считывание файла с диска выполняется очень быстро.
Читать дальше →

Что такое дырявые абстракции? (иллюстрированное руководство)

Время на прочтение5 мин
Охват и читатели12K
Абстракции — естественная составляющая разработки программного обеспечения, и они вполне могут протекать.

image

Оглядевшись вокруг, вы увидите, что вас окружают очень сложные предметы. Смартфоны, компьютеры, принтеры, автомобили, телевизоры, тостеры — список бесконечен. Но какими бы сложными ни были эти устройства, вы можете использовать их для своих нужд, хотя вам было бы трудно собрать любое из них самостоятельно.

Это маленькое чудо возможно благодаря феномену, который мы называем абстракцией. Абстракция — это подход к проектированию, который позволяет заменить путаницу сложных деталей аккуратным интерфейсом, который позволяет с легкостью довести дело до конца. Абстракция также работает глубоко в недрах каждой программы, держа в узде нарастающий беспорядок. И время от времени эти абстракции начинают протекать.

В этой статье вы узнаете, что такое «дырявая абстракция», почему она возникает и стоит ли вам — серьезному программисту — беспокоиться об этом.
Читать дальше →

Луковичная архитектура в компоновке backend-приложения и куда в итоге класть маперы

Время на прочтение6 мин
Охват и читатели47K

Как скомпоновать приложение? Какие в нём должны быть слои? Как назвать пакеты? Где расположить DTO, маперы, реализации интерфейсов? И нужны ли вообще интерфейсы? Когда новичок попадает в свою первую компанию, очень часто на эти вопросы у него нет однозначного ответа. Он смотрит код своих коллег, и тут уж как повезёт - если команда сильная, у новичка есть все шансы научиться писать хороший, чистый, код. Если же не повезёт, то новичок будет цепляться за то, что есть, нахватается плохих практик, и по прошествии года-двух он уже сам будет себе авторитетом, которого не так-то просто будет переубедить.

В посте ниже я описываю личный и командный опыт, под который я постарался подвести теоретическую базу, опираясь на "Чистую архитектуру" Роберта Мартина. Да, этот пост - для новичков, хотя, эта тема жива и среди устоявшихся программистов, поскольку споры о компоновке приложения не утихают и среди сениоров.

Зайду я немного издалека и напомню, что такое луковичная архитектура.

Читать далее

Positive Technologies на HighLoad++ 2022: доклады экспертов, конкурс по поиску уязвимостей и безлимитная газировка

Время на прочтение2 мин
Охват и читатели1.7K

Positive Technologies 24 и 25 ноября примет участие в конференции для разработчиков высоконагруженных систем HighLoad++ 2022.

Заходите на наш стенд, чтобы пообщаться с экспертами, узнать методы поиска уязвимостей и обеспечения безопасности ПО, поискать уязвимости в ходе конкурса, выиграть мерч, а еще сделать тату, раздобыть стикеры и выпить газировки из нашего взломанного советского автомата.

Подробнее

Теория квантовых состояний: из жизни в код

Время на прочтение5 мин
Охват и читатели3.1K

Расскажу вам о моём вИдении правильного программирования любых систем.

Кратко о себе: программист самоучка, примерно в 1992 году начинал с ассемблера, крякая через HIEW (Огромное СПАСИБО автору этого замечательного дизассемблера) всякие DOS-игрухи-проги, и прогая всё, что в голову взбредёт - от игр до вирей (домашних и добрых).

Подробнее о "Теории квантовых состояний" >

Наедине с микросервисом — как забороть тревожность

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.7K

Хочу вам признаться: я довольно тревожный человек, и это качество не заканчивается личной жизнью, а перетекает на работу. От того, что я очень тревожный человек, мне все время хочется проверить, что все идет хорошо, что я нахожусь в конкретной точке, что впереди меня не ждет очень серьезная проблема, из которой будет сложно выбраться. 

Поэтому я люблю метрики — они помогают убедиться в том, что все идет хорошо. О метриках отношений микросервисов и будет этот пост. Меня зовут Алексей Лашнев, я продуктовый разработчик в QIWI.

Читать далее