Как стать автором
Обновить
4
0
Антон Юрьев @AntonYuriev

Пользователь

Покажи мне свой Git, и я скажу, кто ты

Время на прочтение 15 мин
Количество просмотров 32K
Блог компании Конференции Олега Бунина (Онтико) Блог компании Evrone Git *GitHub *

Можно ли с помощью GitHub анализировать работу, не заглядывая в монитор сотрудника — без скриншотов и тайм-трекеров?

Я Александр Кириллов, технический директор компании Evrone. Больше 20 лет я посвятил разработке. В этой статье поделюсь с вами опытом, который собрал за время работы с распределенными командами. Расскажу о том, как, не нарушая приватность разработчиков, следить за качеством работы на проектах и отслеживать нежелательные паттерны с помощью метрик в Jira и Git.

Читать далее
Всего голосов 73: ↑63 и ↓10 +53
Комментарии 26

5 советов по созданию лучших диаграмм архитектуры решения

Время на прочтение 6 мин
Количество просмотров 5.9K
Блог компании OTUS Анализ и проектирование систем *
Перевод

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

Читать далее
Всего голосов 10: ↑6 и ↓4 +2
Комментарии 1

Лонгрид по полезному чтению в 2023 году: 39 книг, которые помогут писать красивый <код>

Время на прочтение 17 мин
Количество просмотров 21K
Блог компании CloudMTS Программирование *Профессиональная литература *Машинное обучение *Читальный зал
image

≀И эта статья ответит на вопрос, зачем вообще читать книги в 2023 году при великом разнообразии онлайн-курсов.

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

Каждое издание из подборки расширяет знания по целому ряду тем, связанных с разработкой.

Для вашего удобства добавил рейтинг, ссылки на переводы и картинки для тех, кто просто добавляет статью в закладки, не читая. Enjoy на новогодних праздниках или прямо сейчас.
Читать дальше →
Всего голосов 33: ↑30 и ↓3 +27
Комментарии 12

Абстрактные войны: public interface IAbstraction против абстракции

Время на прочтение 12 мин
Количество просмотров 3.1K
Программирование *Совершенный код *Проектирование и рефакторинг *ООП *

Почти 30 лет назад в классической книге по шаблонам проектирования Design Patterns: Elements of Reusable Object-Oriented Software, авторы сформулировали один из самых известных, но недопонятых принципов в истории программирования:

Program to an interface, not an implementation.

— Erich Gamma et. al, Design Patterns: Elements of Reusable Object-Oriented Software

Зачем "программировать в интерфейсы"?

Давайте разбираться
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 14

Подробное руководство по инверсии зависимостей. Часть 1

Время на прочтение 26 мин
Количество просмотров 19K
Программирование *Java *Анализ и проектирование систем *Проектирование и рефакторинг *
Из песочницы

Инверсия зависимостей - один из принципов SOLID, который лежит в основе построения гексагональной архитектуры приложения. Существует множество статей, которые раскрывают суть принципа и объясняют как его применять. И, возможно, читатель уже знаком с ними. Но в рамках данной статьи будет продемонстрирован подробный разбор "тактических" приемов для успешного использования инверсии зависимостей и, возможно, в этом смысле даже искушенный читатель сможет найти для себя что-то новое. Примеры представлены на языке программирования Java с соответствующим окружением, но при этом для чтения достаточно понимания похожих языков программирования.

Читать далее
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 134

Преодоление сложности в CQRS

Время на прочтение 6 мин
Количество просмотров 8.2K
Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *Управление разработкой *
Перевод

Эта статья является переводом материала «Tackling Complexity in CQRS».

Шаблон CQRS может творить чудеса: он может максимизировать масштабируемость, производительность, безопасность и даже «превзойти» теорему CAP. Тем не менее, например, в своей статье о CQRS Мартин Фаулер утверждает, что шаблон следует применять умеренно и даже осторожно:

«...для большинства систем CQRS добавляет риски»;

«...вы должны быть очень осторожны при использовании CQRS»;

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

С моей точки зрения, сложность, вызванная CQRS, в значительной степени случайна, и поэтому ее можно избежать. Чтобы проиллюстрировать свою точку зрения, я хочу обсудить цель CQRS, а затем проанализировать 3 распространенных источника случайной сложности в системах, использующие CQRS.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 6

Иммутабельная архитектура

Время на прочтение 6 мин
Количество просмотров 8.7K
Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *Функциональное программирование *
Перевод

Эта статья является переводом материала «Immutable architecture».

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

Прежде всего, термин «Иммутабельность», применяемый к структуре данных, такой как класс, означает, что объекты этого класса не могут изменяться в течение их жизненного цикла. Существует несколько типов иммутабельности со своими нюансами, но это не являются для нас существенным. По большей части мы можем сказать, что класс является либо изменяемым, что означает, что его экземпляры могут изменяться тем или иным образом, либо иммутабельным (неизменяемым), что означает, что как только мы создадим экземпляр этого класса, мы не сможем изменить его позже.

Читать далее
Всего голосов 16: ↑13 и ↓3 +10
Комментарии 13

Изоляция модели предметной области

Время на прочтение 7 мин
Количество просмотров 5.8K
Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *ООП *
Перевод

Эта статья является переводом материала «Domain model isolation».

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

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 18

Когда использовать mocks в юнит-тестировании

Время на прочтение 13 мин
Количество просмотров 43K
Тестирование IT-систем *Программирование *Анализ и проектирование систем *Проектирование и рефакторинг *Тестирование веб-сервисов *
Перевод

Эта статья является переводом материала «When to Mock».

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

Ни одна из этих практик не является достаточно хорошей. В этой статье Владимир Хориков покажет, какие зависимости следует мокать, а какие использовать как есть в тестах.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 6

OCP против YAGNI

Время на прочтение 9 мин
Количество просмотров 7.7K
Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *ООП *
Перевод

Эта статья является переводом материала OCP vs YAGNI.

В этом посте хочется осветить тему OCP и YAGNI – противоречия между принципом открытости/закрытости и принципом «вам это не понадобится».

Давайте начнем с того, что вспомним, что такое OCP. Принцип открытости/закрытости гласит, что: Объекты программного обеспечения (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации.

Впервые он был представлен Бертраном Мейером в его канонической книге «Конструирование объектно-ориентированного программного обеспечения». С тех пор его популяризировал Боб Мартин, когда он представил принципы SOLID.

Официальное определение довольно расплывчато и на самом деле не помогает нам понять основной смысл. Итак, давайте углубимся в этот принцип.

Читать далее
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 24

Как приручить DDD. Часть 2. Практическая

Время на прочтение 16 мин
Количество просмотров 17K
Блог компании Конференции Олега Бунина (Онтико) Анализ и проектирование систем *Проектирование и рефакторинг *IT-стандарты *Управление разработкой *

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

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

Читать далее
Всего голосов 24: ↑22 и ↓2 +20
Комментарии 3

Как приручить DDD. Часть 1. Стратегическая

Время на прочтение 13 мин
Количество просмотров 20K
Блог компании Конференции Олега Бунина (Онтико) Анализ и проектирование систем *Проектирование и рефакторинг *IT-стандарты *Управление разработкой *

DDD — одна из моих основных рабочих методологий, я применяю её больше пяти лет. Хотя она довольна сложная, в том числе потому что это верхнеуровневый набор практик. DDD - это не фреймворк, когда нет опыта, его немного сложно применять. Тем не менее мы переводили на DDD работающие проекты, запускали с помощью нее новые — и у нас сложились некоторые практики и подходы.

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

Читать далее
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 4

Строим систему доменных событий в модульном монолите

Время на прочтение 10 мин
Количество просмотров 12K
Блог компании iSpring PHP *Программирование *Анализ и проектирование систем *Проектирование и рефакторинг *
✏️ Технотекст 2021

Всем привет! В этой статье хочу поделиться опытом построения системы доменных событий (domain events) в нашем модульном монолите и микросервисах, рассказать о том, как мы гарантируем их доставку, следим за консистентностью в рамках транзакций, используя transactional outbox, чем доменные события отличаются от интеграционных и всё это в рамках multi tenant приложения. Подробнее под катом.

Читать далее
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 35

7 артефактов проектирования, которые улучшат дизайн

Время на прочтение 8 мин
Количество просмотров 10K
Блог компании AGIMA Проектирование и рефакторинг *Дизайн

Когда кто-то сегодня говорит о UX, довольно часто он имеет в виду не проектирование пользовательского опыта, а визуальный дизайн. И это объяснимо. Сам по себе интерфейс (UI) уже представляет собой некий конечный продукт, и он прост для понимания. 

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

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

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 5

Как у нас в Slack проектируются API

Время на прочтение 10 мин
Количество просмотров 5.8K
Программирование *Клиентская оптимизация *Проектирование и рефакторинг *API *Распределённые системы *
Перевод

Более пяти лет назад мы запустили платформу Slack, предоставив разработчикам легкий способ создавать приложения в Slack и публиковать их в нашей App Directory. Сегодня миллионы пользователей переносят свою работу в Slack, и их приложения, создаваемые более чем 885 000 активными разработчиками, действующими на этой платформе – залог дальнейшего улучшения совместной работы в Slack. 

Все эти годы мы постоянно держим в уме: «проектировать так, чтобы разработчикам было максимально удобно». Да, под капотом мы можем менять реализацию некоторых наших фич, удалить или изменить контракт, описывающий поведение существующего API, очень сложно. Вот почему так важно аккуратно продумывать проектирование API с самого начала.

Если API спроектированы хорошо, разработчики их полюбят и могут стать самыми креативными инноваторами, пользующимися вашими API. Они будут сильно в них вкладываться, а иногда даже могут стать евангелистами ваших API. Мы также ценим время разработчиков и те ресурсы, которыми они могут рискнуть, имея дело с нашей платформой. Если API плохо спроектировать, то его примут холодно, и он даже может вызывать фрустрацию. Плохие API превращаются для компании в обременение.

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

Читать далее
Всего голосов 23: ↑23 и ↓0 +23
Комментарии 4

220 платежей в секунду: выдержать нельзя упасть

Время на прочтение 9 мин
Количество просмотров 8.7K
Блог компании Ozon Tech Высокая производительность *Анализ и проектирование систем *Проектирование и рефакторинг *

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

Я разрабатываю сервисы в команде платежей Ozon. Мы много времени уделяем тому, чтобы все транзакции были обработаны корректно, даже если речь идёт о нагрузке в 2к платежей в минуту (именно столько у нас было в пике в период ноябрьских распродаж). Кстати, сейчас, по результатам нагрузочного тестирования, мы выдерживаем 13к платежей в минуту.

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

Читать далее
Всего голосов 28: ↑26 и ↓2 +24
Комментарии 9

Как извлечь пользу из статической типизации

Время на прочтение 29 мин
Количество просмотров 13K
Программирование *Java *Совершенный код *Проектирование и рефакторинг *

Эта статья о том, как извлечь максимум пользы из статической системы типов при дизайне вашего кода. Статья пытается быть language agnostic (получается не всегда), примеры на Java и взяты из жизни.

Читать далее
Всего голосов 47: ↑47 и ↓0 +47
Комментарии 68

Распутывание микросервисов или балансировка сложности в распределенных системах

Время на прочтение 13 мин
Количество просмотров 12K
Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *Микросервисы *
Перевод

Эта статья является переводом материала «Untangling Microservices, or Balancing Complexity in Distributed Systems».

Расцвет микросервисов закончился. Uber преобразовывает тысячи микросервисов в более управляемое решение [1]; Келси Хайтауэр предсказывает, что будущее за монолитами [2]; и даже Сэм Ньюман заявляет, что микросервисы никогда не должны быть выбором по умолчанию, а скорее крайним средством [3].

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

В этом посте я хочу ответить на эти вопросы. Вы узнаете об общих проблемах проектирования, которые превращают микросервисы в распределенные большие комки грязи (distributed big balls of mud), и, конечно же, о том, как их избежать.

Читать далее
Всего голосов 22: ↑20 и ↓2 +18
Комментарии 8

Повышение устойчивости микросервисов к отказам

Время на прочтение 5 мин
Количество просмотров 6.6K
Блог компании Ситимобил Анализ и проектирование систем *Микросервисы *

Как уже известно, около 70 % отказов в приложениях происходят из-за изменений: развёртывания нового кода, применённых миграции в базе данных, изменения конфигурационных файлов и т.д. Остальные 30 % сбоев происходят в ходе работы приложения без прямого вмешательства разработчиков и системных администраторов: из-за проблем с сетью или дисками, возросшей нагрузки от пользователей, аварии в дата-центре. На первую группу мы можем повлиять с помощью управления изменениями и стратегии проведения этих изменений, а как повысить устойчивость к проблемам из второй группы, мы поговорим в этой статье.

Врууум
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 4

Сравнение подходов к реализации распределенных транзакций для микросервисов

Время на прочтение 21 мин
Количество просмотров 29K
Проектирование и рефакторинг *Распределённые системы *Микросервисы *
Из песочницы
Перевод

Как архитектор-консультант в Red Hat, я имел возможность поработать над множеством проектов для наших клиентов. У каждого из них есть свои особенности, которые, однако, имеют некоторые общие черты. Большинство клиентов хотят знать, как скоординировать запись в несколько систем одновременно. Ответ на этот вопрос обычно включает подробное объяснение двойной записи, распределенных транзакций, современных альтернатив, а также возможных сценариев сбоев и недостатков каждого подхода. Как правило, именно в этот момент заказчик понимает, что разделение монолитного приложения на микросервисы - долгий и сложный путь, обычно требующий компромиссов.

Читать далее
Всего голосов 36: ↑36 и ↓0 +36
Комментарии 9
1

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность

Специализация

Backend Developer, Software Architect
Lead
OOP
Java
High-loaded systems
Designing application architecture
Creating project architecture
Kotlin