#clean_architecture — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #clean_architecture, aggregated by home.social.
-
Чистая архитектура на практике: перестаём ломать сервис при каждом релизе
У вас небольшой релиз. Вы меняете пару строк кода, выкатываете обновление - и через несколько минут сервис начинает отдавать странные ошибки. Баги появляются в местах, которые вы вообще не трогали. Знакомо? Обычно проблема не в конкретном изменении, а в архитектурной связанности системы: инфраструктурные детали начинают протекать в бизнес-логику, и зависимости между компонентами становятся слишком плотными. Разберём это на примерах. Примеры будут псевдореальные, иначе статья быстро превратится в книгу. Посмотрите на функцию загрузки инвойса:
https://habr.com/ru/articles/1034758/
#clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid
-
Чистая архитектура на практике: перестаём ломать сервис при каждом релизе
У вас небольшой релиз. Вы меняете пару строк кода, выкатываете обновление - и через несколько минут сервис начинает отдавать странные ошибки. Баги появляются в местах, которые вы вообще не трогали. Знакомо? Обычно проблема не в конкретном изменении, а в архитектурной связанности системы: инфраструктурные детали начинают протекать в бизнес-логику, и зависимости между компонентами становятся слишком плотными. Разберём это на примерах. Примеры будут псевдореальные, иначе статья быстро превратится в книгу. Посмотрите на функцию загрузки инвойса:
https://habr.com/ru/articles/1034758/
#clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid
-
Чистая архитектура на практике: перестаём ломать сервис при каждом релизе
У вас небольшой релиз. Вы меняете пару строк кода, выкатываете обновление - и через несколько минут сервис начинает отдавать странные ошибки. Баги появляются в местах, которые вы вообще не трогали. Знакомо? Обычно проблема не в конкретном изменении, а в архитектурной связанности системы: инфраструктурные детали начинают протекать в бизнес-логику, и зависимости между компонентами становятся слишком плотными. Разберём это на примерах. Примеры будут псевдореальные, иначе статья быстро превратится в книгу. Посмотрите на функцию загрузки инвойса:
https://habr.com/ru/articles/1034758/
#clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid
-
Чистая архитектура на практике: перестаём ломать сервис при каждом релизе
У вас небольшой релиз. Вы меняете пару строк кода, выкатываете обновление - и через несколько минут сервис начинает отдавать странные ошибки. Баги появляются в местах, которые вы вообще не трогали. Знакомо? Обычно проблема не в конкретном изменении, а в архитектурной связанности системы: инфраструктурные детали начинают протекать в бизнес-логику, и зависимости между компонентами становятся слишком плотными. Разберём это на примерах. Примеры будут псевдореальные, иначе статья быстро превратится в книгу. Посмотрите на функцию загрузки инвойса:
https://habr.com/ru/articles/1034758/
#clean_architecture #clean_code #architecture #программирование #проектирование_систем #шаблоны_проектирования #ооп #hexagonal_architecture #grasp #solid
-
Почему spec-driven development плохо работает на микросервисах: часть 1. Где теряется контекст
Я работаю в большой продуктовой компании с тысячей микросервисов. В такой системе даже небольшая фича часто проходит через несколько сервисов, событий и внутренних контрактов. Spec-driven development с LLM уже применяется в некоторых командах для планирования и ревью фич, поэтому мне было важно понять, где этот подход помогает, а где начинает ошибаться. Пока задача живёт внутри одного сервиса, всё обычно идёт быстро: спека короткая, описание и реализация помещаются в контекст модели. Но как только фича проходит через несколько сервисов, начинаются проблемы. По отдельности каждый кусок выглядит нормально: разбиение на слои, именование по код стайлу, прохождение тестов и ревью. Но в целом система не работает должным образом. Типичные ошибки: нет идемпотентности, LLM упускает сценарии и edge case-ы, появляются циклические вызовы сервисов. Чем больше делаешь правок, тем больше ошибок она допускает. Для эксперимента я собрал отдельный стенд: Go-проект - платформа для поиска фрилансеров . Внутри 12 микросервисов, связанных через gRPC и брокер сообщений; в этом проекте брокером выступает NATS. Одни сервисы хранят задачи и профили исполнителей, другие подбирают кандидатов, считают расстояния, проверяют портфолио и отправляют уведомления. Проект специально спроектирован с шестью категориями архитектурных ловушек: они проявляются не внутри одного сервиса, а на границах между сервисами. Фича для эксперимента была такой: если выбранный фрилансер отказался от оффера, платформа должна автоматически найти следующего подходящего кандидата, отправить ему новый оффер и уведомить заказчика о переназначении. Claude написал спеку, реализацию и юнит-тесты, но полный сценарий отказа и переназначения не сошёлся. Два независимых ревью нашли одну и ту же группу ошибок: по отдельности сервисы выглядели нормально, а вместе работали не так, как нужно. На это можно ответить, что нужен end-to-end тест на весь сценарий, но это не закрывает проблему целиком. End-to-end тесты есть не везде, их дорого поддерживать, и они не покрывают все развилки: особенно редкие edge case-ы, дубликаты событий, гонки и редкие комбинации условий. Главное же в другом: на этапе spec-driven разработки модель должна помочь собрать требования, ограничения и контекст, а именно там она часто ошибается. Разработчик тоже не всегда заранее знает, где спрятана проблема. Он может помнить про Outbox, дедупликацию уведомлений или особые требования конкретного сервиса к входным данным, но не сформулировать это как ограничение для новой фичи. LLM читает документы по сервисам, задаёт уточняющие вопросы и всё равно может пропустить связь между ними. В итоге спека получается подробной, но неполной: в ней есть локальные изменения по сервисам, зато нет системных инвариантов, которые живут между сервисами. Реализация может быть нормально разложена по слоям, тесты отдельных компонентов проходят, а ошибка обнаруживается уже на уровне сценария или ревью. Где LLM теряет контекст
https://habr.com/ru/articles/1033510/
#claude_code #specdriven_development #microservices #system_design #llm #архитектура #code_review #go #clean_architecture
-
Почему spec-driven development плохо работает на микросервисах: часть 1. Где теряется контекст
Я работаю в большой продуктовой компании с тысячей микросервисов. В такой системе даже небольшая фича часто проходит через несколько сервисов, событий и внутренних контрактов. Spec-driven development с LLM уже применяется в некоторых командах для планирования и ревью фич, поэтому мне было важно понять, где этот подход помогает, а где начинает ошибаться. Пока задача живёт внутри одного сервиса, всё обычно идёт быстро: спека короткая, описание и реализация помещаются в контекст модели. Но как только фича проходит через несколько сервисов, начинаются проблемы. По отдельности каждый кусок выглядит нормально: разбиение на слои, именование по код стайлу, прохождение тестов и ревью. Но в целом система не работает должным образом. Типичные ошибки: нет идемпотентности, LLM упускает сценарии и edge case-ы, появляются циклические вызовы сервисов. Чем больше делаешь правок, тем больше ошибок она допускает. Для эксперимента я собрал отдельный стенд: Go-проект - платформа для поиска фрилансеров . Внутри 12 микросервисов, связанных через gRPC и брокер сообщений; в этом проекте брокером выступает NATS. Одни сервисы хранят задачи и профили исполнителей, другие подбирают кандидатов, считают расстояния, проверяют портфолио и отправляют уведомления. Проект специально спроектирован с шестью категориями архитектурных ловушек: они проявляются не внутри одного сервиса, а на границах между сервисами. Фича для эксперимента была такой: если выбранный фрилансер отказался от оффера, платформа должна автоматически найти следующего подходящего кандидата, отправить ему новый оффер и уведомить заказчика о переназначении. Claude написал спеку, реализацию и юнит-тесты, но полный сценарий отказа и переназначения не сошёлся. Два независимых ревью нашли одну и ту же группу ошибок: по отдельности сервисы выглядели нормально, а вместе работали не так, как нужно. На это можно ответить, что нужен end-to-end тест на весь сценарий, но это не закрывает проблему целиком. End-to-end тесты есть не везде, их дорого поддерживать, и они не покрывают все развилки: особенно редкие edge case-ы, дубликаты событий, гонки и редкие комбинации условий. Главное же в другом: на этапе spec-driven разработки модель должна помочь собрать требования, ограничения и контекст, а именно там она часто ошибается. Разработчик тоже не всегда заранее знает, где спрятана проблема. Он может помнить про Outbox, дедупликацию уведомлений или особые требования конкретного сервиса к входным данным, но не сформулировать это как ограничение для новой фичи. LLM читает документы по сервисам, задаёт уточняющие вопросы и всё равно может пропустить связь между ними. В итоге спека получается подробной, но неполной: в ней есть локальные изменения по сервисам, зато нет системных инвариантов, которые живут между сервисами. Реализация может быть нормально разложена по слоям, тесты отдельных компонентов проходят, а ошибка обнаруживается уже на уровне сценария или ревью. Где LLM теряет контекст
https://habr.com/ru/articles/1033510/
#claude_code #specdriven_development #microservices #system_design #llm #архитектура #code_review #go #clean_architecture
-
Почему spec-driven development плохо работает на микросервисах: часть 1. Где теряется контекст
Я работаю в большой продуктовой компании с тысячей микросервисов. В такой системе даже небольшая фича часто проходит через несколько сервисов, событий и внутренних контрактов. Spec-driven development с LLM уже применяется в некоторых командах для планирования и ревью фич, поэтому мне было важно понять, где этот подход помогает, а где начинает ошибаться. Пока задача живёт внутри одного сервиса, всё обычно идёт быстро: спека короткая, описание и реализация помещаются в контекст модели. Но как только фича проходит через несколько сервисов, начинаются проблемы. По отдельности каждый кусок выглядит нормально: разбиение на слои, именование по код стайлу, прохождение тестов и ревью. Но в целом система не работает должным образом. Типичные ошибки: нет идемпотентности, LLM упускает сценарии и edge case-ы, появляются циклические вызовы сервисов. Чем больше делаешь правок, тем больше ошибок она допускает. Для эксперимента я собрал отдельный стенд: Go-проект - платформа для поиска фрилансеров . Внутри 12 микросервисов, связанных через gRPC и брокер сообщений; в этом проекте брокером выступает NATS. Одни сервисы хранят задачи и профили исполнителей, другие подбирают кандидатов, считают расстояния, проверяют портфолио и отправляют уведомления. Проект специально спроектирован с шестью категориями архитектурных ловушек: они проявляются не внутри одного сервиса, а на границах между сервисами. Фича для эксперимента была такой: если выбранный фрилансер отказался от оффера, платформа должна автоматически найти следующего подходящего кандидата, отправить ему новый оффер и уведомить заказчика о переназначении. Claude написал спеку, реализацию и юнит-тесты, но полный сценарий отказа и переназначения не сошёлся. Два независимых ревью нашли одну и ту же группу ошибок: по отдельности сервисы выглядели нормально, а вместе работали не так, как нужно. На это можно ответить, что нужен end-to-end тест на весь сценарий, но это не закрывает проблему целиком. End-to-end тесты есть не везде, их дорого поддерживать, и они не покрывают все развилки: особенно редкие edge case-ы, дубликаты событий, гонки и редкие комбинации условий. Главное же в другом: на этапе spec-driven разработки модель должна помочь собрать требования, ограничения и контекст, а именно там она часто ошибается. Разработчик тоже не всегда заранее знает, где спрятана проблема. Он может помнить про Outbox, дедупликацию уведомлений или особые требования конкретного сервиса к входным данным, но не сформулировать это как ограничение для новой фичи. LLM читает документы по сервисам, задаёт уточняющие вопросы и всё равно может пропустить связь между ними. В итоге спека получается подробной, но неполной: в ней есть локальные изменения по сервисам, зато нет системных инвариантов, которые живут между сервисами. Реализация может быть нормально разложена по слоям, тесты отдельных компонентов проходят, а ошибка обнаруживается уже на уровне сценария или ревью. Где LLM теряет контекст
https://habr.com/ru/articles/1033510/
#claude_code #specdriven_development #microservices #system_design #llm #архитектура #code_review #go #clean_architecture
-
Почему spec-driven development плохо работает на микросервисах: часть 1. Где теряется контекст
Я работаю в большой продуктовой компании с тысячей микросервисов. В такой системе даже небольшая фича часто проходит через несколько сервисов, событий и внутренних контрактов. Spec-driven development с LLM уже применяется в некоторых командах для планирования и ревью фич, поэтому мне было важно понять, где этот подход помогает, а где начинает ошибаться. Пока задача живёт внутри одного сервиса, всё обычно идёт быстро: спека короткая, описание и реализация помещаются в контекст модели. Но как только фича проходит через несколько сервисов, начинаются проблемы. По отдельности каждый кусок выглядит нормально: разбиение на слои, именование по код стайлу, прохождение тестов и ревью. Но в целом система не работает должным образом. Типичные ошибки: нет идемпотентности, LLM упускает сценарии и edge case-ы, появляются циклические вызовы сервисов. Чем больше делаешь правок, тем больше ошибок она допускает. Для эксперимента я собрал отдельный стенд: Go-проект - платформа для поиска фрилансеров . Внутри 12 микросервисов, связанных через gRPC и брокер сообщений; в этом проекте брокером выступает NATS. Одни сервисы хранят задачи и профили исполнителей, другие подбирают кандидатов, считают расстояния, проверяют портфолио и отправляют уведомления. Проект специально спроектирован с шестью категориями архитектурных ловушек: они проявляются не внутри одного сервиса, а на границах между сервисами. Фича для эксперимента была такой: если выбранный фрилансер отказался от оффера, платформа должна автоматически найти следующего подходящего кандидата, отправить ему новый оффер и уведомить заказчика о переназначении. Claude написал спеку, реализацию и юнит-тесты, но полный сценарий отказа и переназначения не сошёлся. Два независимых ревью нашли одну и ту же группу ошибок: по отдельности сервисы выглядели нормально, а вместе работали не так, как нужно. На это можно ответить, что нужен end-to-end тест на весь сценарий, но это не закрывает проблему целиком. End-to-end тесты есть не везде, их дорого поддерживать, и они не покрывают все развилки: особенно редкие edge case-ы, дубликаты событий, гонки и редкие комбинации условий. Главное же в другом: на этапе spec-driven разработки модель должна помочь собрать требования, ограничения и контекст, а именно там она часто ошибается. Разработчик тоже не всегда заранее знает, где спрятана проблема. Он может помнить про Outbox, дедупликацию уведомлений или особые требования конкретного сервиса к входным данным, но не сформулировать это как ограничение для новой фичи. LLM читает документы по сервисам, задаёт уточняющие вопросы и всё равно может пропустить связь между ними. В итоге спека получается подробной, но неполной: в ней есть локальные изменения по сервисам, зато нет системных инвариантов, которые живут между сервисами. Реализация может быть нормально разложена по слоям, тесты отдельных компонентов проходят, а ошибка обнаруживается уже на уровне сценария или ревью. Где LLM теряет контекст
https://habr.com/ru/articles/1033510/
#claude_code #specdriven_development #microservices #system_design #llm #архитектура #code_review #go #clean_architecture
-
Я устал от Duolingo и написал себе AI-репетитора. Go, Clean Architecture, 4 LLM-модели — и вот что из этого вышло
Мой рабочий день - это код. Вечером я хочу разговаривать с кем-то по-английски, а не нажимать на пингвинчиков. Duolingo учит меня заказывать яблоки, ChatGPT-чат отлично объясняет грамматику - но не помнит, что я разбирал Present Perfect в среду и опять путаю его с Past Simple в пятницу. Я хотел простую штуку: написать модели «давай сегодня про багтрекеры»; получить чат на 15 минут; а в конце - три новых слова , которые она же мне и подобрала по уровню B1. Чтобы завтра эти слова всплыли в упражнениях. Через месяц получился Lexis : Go · Clean Architecture · 4 LLM-модели · SSE-стриминг · JWT rotation + reuse detection MIT, открытый репозиторий. В статье - три инженерных якоря , которыми я доволен: Pluggable AI-провайдеры через интерфейс из трёх методов. SSE вместо WebSocket для стриминга AI-ответов. JWT rotation + reuse detection как production-ready стандарт, а не «потом перепишем». Плюс честный список того, что ещё не готово. Показать архитектуру
https://habr.com/ru/articles/1030928/
#Go #Clean_Architecture #JWT #AI #LLM #petproject #изучение_английского #SSE #modular_monolith #refresh_tokens
-
Я устал от Duolingo и написал себе AI-репетитора. Go, Clean Architecture, 4 LLM-модели — и вот что из этого вышло
Мой рабочий день - это код. Вечером я хочу разговаривать с кем-то по-английски, а не нажимать на пингвинчиков. Duolingo учит меня заказывать яблоки, ChatGPT-чат отлично объясняет грамматику - но не помнит, что я разбирал Present Perfect в среду и опять путаю его с Past Simple в пятницу. Я хотел простую штуку: написать модели «давай сегодня про багтрекеры»; получить чат на 15 минут; а в конце - три новых слова , которые она же мне и подобрала по уровню B1. Чтобы завтра эти слова всплыли в упражнениях. Через месяц получился Lexis : Go · Clean Architecture · 4 LLM-модели · SSE-стриминг · JWT rotation + reuse detection MIT, открытый репозиторий. В статье - три инженерных якоря , которыми я доволен: Pluggable AI-провайдеры через интерфейс из трёх методов. SSE вместо WebSocket для стриминга AI-ответов. JWT rotation + reuse detection как production-ready стандарт, а не «потом перепишем». Плюс честный список того, что ещё не готово. Показать архитектуру
https://habr.com/ru/articles/1030928/
#Go #Clean_Architecture #JWT #AI #LLM #petproject #изучение_английского #SSE #modular_monolith #refresh_tokens
-
Я устал от Duolingo и написал себе AI-репетитора. Go, Clean Architecture, 4 LLM-модели — и вот что из этого вышло
Мой рабочий день - это код. Вечером я хочу разговаривать с кем-то по-английски, а не нажимать на пингвинчиков. Duolingo учит меня заказывать яблоки, ChatGPT-чат отлично объясняет грамматику - но не помнит, что я разбирал Present Perfect в среду и опять путаю его с Past Simple в пятницу. Я хотел простую штуку: написать модели «давай сегодня про багтрекеры»; получить чат на 15 минут; а в конце - три новых слова , которые она же мне и подобрала по уровню B1. Чтобы завтра эти слова всплыли в упражнениях. Через месяц получился Lexis : Go · Clean Architecture · 4 LLM-модели · SSE-стриминг · JWT rotation + reuse detection MIT, открытый репозиторий. В статье - три инженерных якоря , которыми я доволен: Pluggable AI-провайдеры через интерфейс из трёх методов. SSE вместо WebSocket для стриминга AI-ответов. JWT rotation + reuse detection как production-ready стандарт, а не «потом перепишем». Плюс честный список того, что ещё не готово. Показать архитектуру
https://habr.com/ru/articles/1030928/
#Go #Clean_Architecture #JWT #AI #LLM #petproject #изучение_английского #SSE #modular_monolith #refresh_tokens
-
Я устал от Duolingo и написал себе AI-репетитора. Go, Clean Architecture, 4 LLM-модели — и вот что из этого вышло
Мой рабочий день - это код. Вечером я хочу разговаривать с кем-то по-английски, а не нажимать на пингвинчиков. Duolingo учит меня заказывать яблоки, ChatGPT-чат отлично объясняет грамматику - но не помнит, что я разбирал Present Perfect в среду и опять путаю его с Past Simple в пятницу. Я хотел простую штуку: написать модели «давай сегодня про багтрекеры»; получить чат на 15 минут; а в конце - три новых слова , которые она же мне и подобрала по уровню B1. Чтобы завтра эти слова всплыли в упражнениях. Через месяц получился Lexis : Go · Clean Architecture · 4 LLM-модели · SSE-стриминг · JWT rotation + reuse detection MIT, открытый репозиторий. В статье - три инженерных якоря , которыми я доволен: Pluggable AI-провайдеры через интерфейс из трёх методов. SSE вместо WebSocket для стриминга AI-ответов. JWT rotation + reuse detection как production-ready стандарт, а не «потом перепишем». Плюс честный список того, что ещё не готово. Показать архитектуру
https://habr.com/ru/articles/1030928/
#Go #Clean_Architecture #JWT #AI #LLM #petproject #изучение_английского #SSE #modular_monolith #refresh_tokens
-
3 архитектурные ошибки в C#, из-за которых проект становится неуправляемым
Когда проект молодой, писать «всё в одном классе» кажется быстрее. Создать отдельный интерфейс, вынести слой — это же лишняя минута! Но эта минута потом стоит часов: код невозможно покрыть тестами, замена ORM превращается в переписывание бизнес-логики, а новый человек в команде тратит день только на то, чтобы понять, где в методе заканчивается выборка из базы и начинается бизнес-правило. Эти антипаттерны не привязаны к версии фреймворка — они встречаются и в legacy на .NET Framework, и в современных проектах на .NET 8. Покажу три конкретных примера из реальных проектов — и как их исправить.
https://habr.com/ru/articles/1012004/
#c# #net_core #clean_architecture #антипаттерны #рефакторинг
-
Как реализовать WebSocket на Android и не сойти с ума
Как часто вы слышите что-то о протоколе WebSocket? А как часто видели его в проектах? Продакшн? Андроид? Что? Его кто-то использует? А теперь представьте, что перед вами стоит задача внедрить WS в крупный продакшн проект с нуля. С чего начать? Как подступиться?
https://habr.com/ru/companies/betboom/articles/1007816/
#kotlin #android #websocket #kmp #network #kotlin_multiplatform #wss #clean_architecture #мобильная_разработка #андроид
-
ADR, архитектурные тесты и кейсы из прода: ресурсы, которые реально меняют код
У меня была привычка. Вижу классную статью про архитектуру —-сохраняю. Репозиторий с примерами DDD - в закладки. Видео про CQRS - в плейлист «Посмотреть потом». Вы знаете, чем кончаются плейлисты «Посмотреть потом». В какой-то момент закладок стало 300+. Половина ссылок битые, треть дублируют друг друга, остальное - статьи, которые казались гениальными в два часа ночи. Я сел и вычистил всё до 106 ресурсов. Собрал их в awesome-list на GitHub . Но статья не про список. Статья про три вещи, которые я для себя открыл в процессе и которые почему-то мало обсуждают.
https://habr.com/ru/articles/1001010/
#architecture #DDD #CQRS #clean_architecture #ADR #software_design #software_architecture #best_practices #system_design #microservices
-
Надежный код: как писать тесты, чтобы запускать фичи в продакшен одним днем
Писать или не писать тесты — выбор очевидный. Конечно, писать. Но если проект масштабный, одних unit‑тестов будет недостаточно: они бессильны на границах модулей, в интеграциях и пользовательских сценариях, а значит в этих местах будут пролезать баги. Такой код будет сложно поддерживать, вносить в него изменения и получать ожидаемый результат. В статье поговорим про разные стратегии тестирования под разные риски и кейсы. Поднимемся над привычными unit‑тестами и заглянем, что там есть еще. Спойлер: а еще там workflow‑, integration‑, property‑based‑ и resilience‑тесты.
https://habr.com/ru/companies/mindbox/articles/1000090/
#C# #unittesting #integration_testing #propertybasedtesting #pure_functions #clean_architecture
-
Надежный код: как писать тесты, чтобы запускать фичи в продакшен одним днем
Писать или не писать тесты — выбор очевидный. Конечно, писать. Но если проект масштабный, одних unit‑тестов будет недостаточно: они бессильны на границах модулей, в интеграциях и пользовательских сценариях, а значит в этих местах будут пролезать баги. Такой код будет сложно поддерживать, вносить в него изменения и получать ожидаемый результат. В статье поговорим про разные стратегии тестирования под разные риски и кейсы. Поднимемся над привычными unit‑тестами и заглянем, что там есть еще. Спойлер: а еще там workflow‑, integration‑, property‑based‑ и resilience‑тесты.
https://habr.com/ru/companies/mindbox/articles/1000090/
#C# #unittesting #integration_testing #propertybasedtesting #pure_functions #clean_architecture
-
Надежный код: как писать тесты, чтобы запускать фичи в продакшен одним днем
Писать или не писать тесты — выбор очевидный. Конечно, писать. Но если проект масштабный, одних unit‑тестов будет недостаточно: они бессильны на границах модулей, в интеграциях и пользовательских сценариях, а значит в этих местах будут пролезать баги. Такой код будет сложно поддерживать, вносить в него изменения и получать ожидаемый результат. В статье поговорим про разные стратегии тестирования под разные риски и кейсы. Поднимемся над привычными unit‑тестами и заглянем, что там есть еще. Спойлер: а еще там workflow‑, integration‑, property‑based‑ и resilience‑тесты.
https://habr.com/ru/companies/mindbox/articles/1000090/
#C# #unittesting #integration_testing #propertybasedtesting #pure_functions #clean_architecture
-
Надежный код: как писать тесты, чтобы запускать фичи в продакшен одним днем
Писать или не писать тесты — выбор очевидный. Конечно, писать. Но если проект масштабный, одних unit‑тестов будет недостаточно: они бессильны на границах модулей, в интеграциях и пользовательских сценариях, а значит в этих местах будут пролезать баги. Такой код будет сложно поддерживать, вносить в него изменения и получать ожидаемый результат. В статье поговорим про разные стратегии тестирования под разные риски и кейсы. Поднимемся над привычными unit‑тестами и заглянем, что там есть еще. Спойлер: а еще там workflow‑, integration‑, property‑based‑ и resilience‑тесты.
https://habr.com/ru/companies/mindbox/articles/1000090/
#C# #unittesting #integration_testing #propertybasedtesting #pure_functions #clean_architecture
-
Как я написал AI-генератор коротких видео (Shorts/Reels) на Python с Clean Architecture
Привет, Хабр! 👋 В этой статье я хочу поделиться опытом разработки пет-проекта, который превратился в полноценный инструмент для автоматической генерации коротких видео (Shorts, Reels, TikTok). Идея проста: на входе — тема (например, "История Римской Империи за 1 минуту"), на выходе — готовый видеоролик с озвучкой, субтитрами и сгенерированным видеорядом. Но вместо того, чтобы накидать "спагетти-код" в одном файле main.py , я решил подойти к задаче как инженер и построить систему на принципах Clean Architecture . 🎯 Зачем? Генерация видео — это сложный пайплайн: 1. Написать сценарий. 2. Придумать визуальный стиль. 3. Сгенерировать картинки (Midjourney, Flux). 4. Оживить картинки в видео (Kling, Runway, Sora). 5. Озвучить текст (TTS). 6. Собрать всё вместе с субтитрами. API меняются, модели выходят новые каждую неделю. Сегодня лучший визуал у Flux, завтра у Midjourney v7. Сегодня видео делаем в Runway, завтра в Kling. Жесткая привязка к конкретным API убила бы проект через месяц. Поэтому Clean Architecture здесь не роскошь, а необходимость. 🏗 Архитектура Проект разбит на слои, следуя классической "луковой" архитектуре: 1. Domain (Entities) : Pydantic-модели, описывающие суть ( VideoScript , Scene , Character ). Они ничего не знают о внешнем мире. 2. Interfaces : Абстрактные классы ( VideoGenerator , ScriptGenerator ). Контракты, которые должны соблюдать внешние сервисы. 3. Services (Use Cases) : Бизнес-логика. Здесь живут "Агенты": Сценарист, Арт-директор, Режиссер монтажа. 4. Infrastructure : Реализации интерфейсов (API клиентов Comet, Yandex, OpenAI и т.д.).
-
Технический гайд по сторис — часть 3: как мы написали свою библиотеку
Привет! Меня зовут Владислав Фальзан, я работаю android-разработчиком в М2. Наша команда мобильной разработки развивает приложение — онлайн-платформу для решения вопросов с недвижимостью. Основные пользователи приложения — физические лица (B2C) и риелторы (B2B2C). Эта статья — технический гайд для android-разработчиков о том, как использовать нашу новую библиотеку по сторис с деталями и нюансами реализации. Из статьи вы поймете: как использовать библиотеку на полную мощность для своих задач и как она устроена изнутри. Для удобства изучения статьи я решил разбить ее на блоки:
https://habr.com/ru/companies/m2tech/articles/980424/
#android #ddd #compose #stories #mvvm #kotlin #coroutines #clean_architecture #room
-
Структура кода в папке Domain по DDD
В слое Domain 90% проектов с тактическим DDD забыли о самом главном. Сегодня мы вспомним то о чем забыли или узнаем то чего не знали.
https://habr.com/ru/articles/975936/
#DDD #domain_driven_design #domain_driven_development #backend #clean_architecture #bounded_context #domain #monolith
-
Как полюбить писать тесты: опыт TATLIN.UNIFIED
Всем привет! Меня зовут Макс Теричев. Я старший инженер по разработке ПО в
https://habr.com/ru/companies/yadro/articles/964122/
#golang #тестирование #unitтесты #code_coverage #ci_cd #mock #git_hooks #clean_architecture #gomock #tatlinunified
-
Как полюбить писать тесты: опыт TATLIN.UNIFIED
Всем привет! Меня зовут Макс Теричев. Я старший инженер по разработке ПО в
https://habr.com/ru/companies/yadro/articles/964122/
#golang #тестирование #unitтесты #code_coverage #ci_cd #mock #git_hooks #clean_architecture #gomock #tatlinunified
-
Как полюбить писать тесты: опыт TATLIN.UNIFIED
Всем привет! Меня зовут Макс Теричев. Я старший инженер по разработке ПО в
https://habr.com/ru/companies/yadro/articles/964122/
#golang #тестирование #unitтесты #code_coverage #ci_cd #mock #git_hooks #clean_architecture #gomock #tatlinunified
-
Как полюбить писать тесты: опыт TATLIN.UNIFIED
Всем привет! Меня зовут Макс Теричев. Я старший инженер по разработке ПО в
https://habr.com/ru/companies/yadro/articles/964122/
#golang #тестирование #unitтесты #code_coverage #ci_cd #mock #git_hooks #clean_architecture #gomock #tatlinunified
-
Boolean — плохой флаг для данных
Мы все видели и использовали поля типа boolean в базах данных как часть структуры данных. На первый взгляд это удобно: два значения — «да» или «нет», просто и понятно. Например, у пользователя может быть флаг is_active , который показывает, включён аккаунт или нет, или поле is_deleted , которое используется как мягкое удаление. Такие поля встречаются повсюду. Но на практике хранение boolean в базе данных как элемента модели часто приводит к проблемам. В этой статье разберёмся, почему boolean может быть плохим выбором, и что использовать вместо него, чтобы избежать ошибок в будущем.
https://habr.com/ru/articles/942910/
#clean_code #clean_architecture #data_structures #data_storage #architectureascode #architecture_design #architecture_principles #architectural_decision_records
-
Boolean — плохой флаг для данных
Мы все видели и использовали поля типа boolean в базах данных как часть структуры данных. На первый взгляд это удобно: два значения — «да» или «нет», просто и понятно. Например, у пользователя может быть флаг is_active , который показывает, включён аккаунт или нет, или поле is_deleted , которое используется как мягкое удаление. Такие поля встречаются повсюду. Но на практике хранение boolean в базе данных как элемента модели часто приводит к проблемам. В этой статье разберёмся, почему boolean может быть плохим выбором, и что использовать вместо него, чтобы избежать ошибок в будущем.
https://habr.com/ru/articles/942910/
#clean_code #clean_architecture #data_structures #data_storage #architectureascode #architecture_design #architecture_principles #architectural_decision_records
-
Boolean — плохой флаг для данных
Мы все видели и использовали поля типа boolean в базах данных как часть структуры данных. На первый взгляд это удобно: два значения — «да» или «нет», просто и понятно. Например, у пользователя может быть флаг is_active , который показывает, включён аккаунт или нет, или поле is_deleted , которое используется как мягкое удаление. Такие поля встречаются повсюду. Но на практике хранение boolean в базе данных как элемента модели часто приводит к проблемам. В этой статье разберёмся, почему boolean может быть плохим выбором, и что использовать вместо него, чтобы избежать ошибок в будущем.
https://habr.com/ru/articles/942910/
#clean_code #clean_architecture #data_structures #data_storage #architectureascode #architecture_design #architecture_principles #architectural_decision_records
-
Boolean — плохой флаг для данных
Мы все видели и использовали поля типа boolean в базах данных как часть структуры данных. На первый взгляд это удобно: два значения — «да» или «нет», просто и понятно. Например, у пользователя может быть флаг is_active , который показывает, включён аккаунт или нет, или поле is_deleted , которое используется как мягкое удаление. Такие поля встречаются повсюду. Но на практике хранение boolean в базе данных как элемента модели часто приводит к проблемам. В этой статье разберёмся, почему boolean может быть плохим выбором, и что использовать вместо него, чтобы избежать ошибок в будущем.
https://habr.com/ru/articles/942910/
#clean_code #clean_architecture #data_structures #data_storage #architectureascode #architecture_design #architecture_principles #architectural_decision_records
-
Технический гайд по сторис ч.2: багфиксы, оптимизация, новые фичи и +350% к переходам
Привет! Меня зовут Владислав Фальзан, я работаю android-разработчиком в М2. Наша команда мобильной разработки развивает приложение — онлайн-платформу для решения вопросов с недвижимостью. Основные пользователи приложения — физические лица (B2C) и риелторы (B2B2C). Эта статья — продолжение технического гайда для android-разработчиков, которые хотят реализовать и внедрить полный цикл сторис у себя в приложении с использованием: Compose, MVVM, Coroutines flow и правил чистой архитектуры.
https://habr.com/ru/companies/m2tech/articles/940864/
#android #ddd #compose #stories #mvvm #kotlin #coroutines #dagger #clean_architecture
-
Clean Architecture во frontend: почему я ушёл от FSD
Привет! Хочу поделиться с тобой опытом перехода от Feature-Sliced Design к Clean Architecture во фронтенде. Почему я считаю Clean Architecture более подходящей для сложных приложений, и как она решает проблемы, с которыми ты точно сталкивался. Если ты используешь FSD и тебе уже больно или до сих пор пишешь всю логику в компонентах React — эта статья точно для тебя.
https://habr.com/ru/articles/938894/
#clean_architecture #frontend #fsd #featuresliced_design #react #vue
-
Clean Arch + Cubit + Reactor
Clean + Cubit + Reactor Взаимодействие кубитов друг с другом изолированно через репозиторий без стримов. Подход, который родился у меня в процессе работы над несколькими моими проектами. Задача — как синхронизировать несколько независимых Cubit‑ов, работающих с одними и теми же данными, имеющих разную логику и при этом не связывать их напрямую и не пробрасывать события через UI.
-
[Перевод] Ликбез по UseCase’ам Android: от базовых реализаций до мультипровайдерных и многомодульных систем — Часть 2
В этой части мы обсудим многомодульный подход к реализации нашего примера с оплатой. А в заключительном разделе мы поговорим о том, как поддерживать сбалансированную Чистую архитектуру, избегая оверинжиниринга.
https://habr.com/ru/companies/otus/articles/926316/
#clean_architecture #Чистая_архитектура #SOLID #SRP #DIP #LSP #инверсия_зависимостей #разделение_ответственности #архитектура_приложений
-
[Перевод] Оверинжиниринг в луковичной и гексагональной архитектурах
Команда Spring АйО перевела статью, которая рассказывает о том, как луковичная и гексагональная архитектура часто используется программистами в неоправданно сложном варианте, взятом из учебника, и как эти архитектурные стили можно упростить, получив от этого существенные преимущества в плане затрат на разработку и поддержку.
https://habr.com/ru/companies/spring_aio/articles/917172/
#overengineering #onion_architecture #hexagonal_architecture #clean_architecture #interface #strict_layers #code_smell #rest_api #mock #dto
-
[Перевод] Оверинжиниринг в луковичной и гексагональной архитектурах
Команда Spring АйО перевела статью, которая рассказывает о том, как луковичная и гексагональная архитектура часто используется программистами в неоправданно сложном варианте, взятом из учебника, и как эти архитектурные стили можно упростить, получив от этого существенные преимущества в плане затрат на разработку и поддержку.
https://habr.com/ru/companies/spring_aio/articles/917172/
#overengineering #onion_architecture #hexagonal_architecture #clean_architecture #interface #strict_layers #code_smell #rest_api #mock #dto
-
[Перевод] Оверинжиниринг в луковичной и гексагональной архитектурах
Команда Spring АйО перевела статью, которая рассказывает о том, как луковичная и гексагональная архитектура часто используется программистами в неоправданно сложном варианте, взятом из учебника, и как эти архитектурные стили можно упростить, получив от этого существенные преимущества в плане затрат на разработку и поддержку.
https://habr.com/ru/companies/spring_aio/articles/917172/
#overengineering #onion_architecture #hexagonal_architecture #clean_architecture #interface #strict_layers #code_smell #rest_api #mock #dto
-
[Перевод] Оверинжиниринг в луковичной и гексагональной архитектурах
Команда Spring АйО перевела статью, которая рассказывает о том, как луковичная и гексагональная архитектура часто используется программистами в неоправданно сложном варианте, взятом из учебника, и как эти архитектурные стили можно упростить, получив от этого существенные преимущества в плане затрат на разработку и поддержку.
https://habr.com/ru/companies/spring_aio/articles/917172/
#overengineering #onion_architecture #hexagonal_architecture #clean_architecture #interface #strict_layers #code_smell #rest_api #mock #dto
-
OCP из SOLID
Знаю, что тема уже изъезжана вдоль и поперек, но я хотел бы поделиться своим видением Open/Close Principle из всеми любимым SOLID подходу к построении архитектуры софта. Ведь дядюшка Боб херни не посоветует, все таки опыта ему не занимать, поскольку он с 70х годов в разработке и знает базу, что нам и нужно. Да современный софт ушел далеко от того какой он был в 70-х, когда писали логические цепочек на перфокартах, делая дырки в картоне и компиляция занимала прямо прапорционально количеству этих самы карточек, где скорость выполнения считалась количеством символов в минуту. За все это время Дядюшка Боб собирал лучшие практики из которых и получились эти 5 принципов, которые помогут построить софт, который будет не так сильно с течением времени влиять на стоимость одной строки кода. (О чем он и пишет в своей книги "Чистая архитектура"). Хочу отметить то, что есть мнение, что принципы SOLID - это про ООП и для языков, которые не следуют этой парадигме это не актуально, нет. Эти принципы построения архитектуры приложения не зависят от языка. Если вы читали книгу "Чистая архитектуры" и дошли до Open/Close principle (SOLID) и из примера ничего не поняли, тогда вы пришли по адресу, поскольку я буду рассматривать именно этот пример. Для меня лично OCP это один из принципов, который заставляет продумывать архитектуру приложения, что очень важно. Я не буду писать тут тесты или использовать TDD подход к написанию кода, потому, что это отдельная тема, я сделаю простой http сервер с одним эндпойнтом для получения финансового отчета в разных форматах.
-
Value object и DTO в PHP (DDD)
В чем разница и когда что использовать? Это был один из вопросов, на которые я пытался получить ответ. Попытаюсь тут описать ту практику, которую считаю не плохой. С примерами на PHP . Постараюсь описывать на простом языке - без использования сложной терминологии . Лучше всего это два подхода понимаются в слоистой архитектуре(слой презентации , доменный , инфраструктура , приложение - те, которые на текущий момент я использую в итоговом примере).
-
Value object и DTO в PHP (DDD)
В чем разница и когда что использовать? Это был один из вопросов, на которые я пытался получить ответ. Попытаюсь тут описать ту практику, которую считаю не плохой. С примерами на PHP . Постараюсь описывать на простом языке - без использования сложной терминологии . Лучше всего это два подхода понимаются в слоистой архитектуре(слой презентации , доменный , инфраструктура , приложение - те, которые на текущий момент я использую в итоговом примере).
-
Value object и DTO в PHP (DDD)
В чем разница и когда что использовать? Это был один из вопросов, на которые я пытался получить ответ. Попытаюсь тут описать ту практику, которую считаю не плохой. С примерами на PHP . Постараюсь описывать на простом языке - без использования сложной терминологии . Лучше всего это два подхода понимаются в слоистой архитектуре(слой презентации , доменный , инфраструктура , приложение - те, которые на текущий момент я использую в итоговом примере).
-
Value object и DTO в PHP (DDD)
В чем разница и когда что использовать? Это был один из вопросов, на которые я пытался получить ответ. Попытаюсь тут описать ту практику, которую считаю не плохой. С примерами на PHP . Постараюсь описывать на простом языке - без использования сложной терминологии . Лучше всего это два подхода понимаются в слоистой архитектуре(слой презентации , доменный , инфраструктура , приложение - те, которые на текущий момент я использую в итоговом примере).
-
Go-микросервисы: Стандартизация архитектуры с Clean Architecture и DDD
Go-разработчики часто сталкиваются с парадоксом: изначально простой и понятный проект со временем превращается в сложный для поддержки монолит. ✔️ Бизнес-логика оказывается размазана между слоями? ✔️ Замена базы данных требует переписывания половины кода? ✔️ Новым разработчикам требуется недели, чтобы разобраться в проекте? В этой статье мы разбираем практическое применение DDD и Clean Architecture в Go . Обсуждаем возможный стандарт структуры микросервиса . Оптимизируем существующие. 🔥 Для разработчиков, которые хотят создавать проекты, остающиеся поддерживаемыми даже через годы развития.
https://habr.com/ru/articles/911018/
#clean_architecture #domain_driven_design #ddd #golang #разработка #архитектура #стандарт_golang #чистый_код #чистая_архитектура #паттерны_разработки
-
The Clean Structure — Универсальная структура PHP-проекта на примере Laravel
К написанию этой статьи меня подтолкнуло изучение архитектурных подходов для Vue.js-проектов , а вдохновила - детально описанная методология Feature-Sliced Design . К сожалению, PHP-сообществу не хватает подобных развернутых рекомендаций, да и вообще, каких-то общепризнанных стандартных подходов в структуре проекта. Моя статья - это попытка обобщить изученную мною за много лет информацию и сформировать универсальную структуру проекта, основанную на принципах Clean Architecture и модульного монолита .
https://habr.com/ru/articles/905008/
#clean_architecture #modular_monolith #php #laravel #folder_structure
-
Разбираем архитектуру. Часть 2. Чистая архитектура на примере FastAPI приложения
Идея проекта - создать относительно небольшой пример приложения, демонстрирующий распространённый функционал: логирование, мониторинг, хранение и обработку данных, интеграцию с внешними системами и работу с фоновыми задачами. Функционально проект реализует систему сбора и анализа вакансий с агрегаторов вроде HeadHunter. Но гораздо важнее не то, какие задачи решает система, а то — как именно она это делает. Этот проект — прежде всего о структуре, архитектуре и принципах. Основные используемые технологии : Python 3.13, FastAPI, Nginx, Uvicorn, PostgreSQL, Alembic, Celery, Redis, Pytest, FileBeat, LogStash, ElasticSearch, Kibana, Prometheus, Grafana, Docker, Docker Compose.
https://habr.com/ru/articles/908082/
#python3 #fastapi #clean_architecture #filebeat #logstash #elasticsearch #kibana #prometheus #grafana
-
Разбираем архитектуру. Часть 2. Чистая архитектура на примере FastAPI приложения
Идея проекта - создать относительно небольшой пример приложения, демонстрирующий распространённый функционал: логирование, мониторинг, хранение и обработку данных, интеграцию с внешними системами и работу с фоновыми задачами. Функционально проект реализует систему сбора и анализа вакансий с агрегаторов вроде HeadHunter. Но гораздо важнее не то, какие задачи решает система, а то — как именно она это делает. Этот проект — прежде всего о структуре, архитектуре и принципах. Основные используемые технологии : Python 3.13, FastAPI, Nginx, Uvicorn, PostgreSQL, Alembic, Celery, Redis, Pytest, FileBeat, LogStash, ElasticSearch, Kibana, Prometheus, Grafana, Docker, Docker Compose.
https://habr.com/ru/articles/908082/
#python3 #fastapi #clean_architecture #filebeat #logstash #elasticsearch #kibana #prometheus #grafana
-
Разбираем архитектуру. Часть 2. Чистая архитектура на примере FastAPI приложения
Идея проекта - создать относительно небольшой пример приложения, демонстрирующий распространённый функционал: логирование, мониторинг, хранение и обработку данных, интеграцию с внешними системами и работу с фоновыми задачами. Функционально проект реализует систему сбора и анализа вакансий с агрегаторов вроде HeadHunter. Но гораздо важнее не то, какие задачи решает система, а то — как именно она это делает. Этот проект — прежде всего о структуре, архитектуре и принципах. Основные используемые технологии : Python 3.13, FastAPI, Nginx, Uvicorn, PostgreSQL, Alembic, Celery, Redis, Pytest, FileBeat, LogStash, ElasticSearch, Kibana, Prometheus, Grafana, Docker, Docker Compose.
https://habr.com/ru/articles/908082/
#python3 #fastapi #clean_architecture #filebeat #logstash #elasticsearch #kibana #prometheus #grafana
-
Разбираем архитектуру. Часть 2. Чистая архитектура на примере FastAPI приложения
Идея проекта - создать относительно небольшой пример приложения, демонстрирующий распространённый функционал: логирование, мониторинг, хранение и обработку данных, интеграцию с внешними системами и работу с фоновыми задачами. Функционально проект реализует систему сбора и анализа вакансий с агрегаторов вроде HeadHunter. Но гораздо важнее не то, какие задачи решает система, а то — как именно она это делает. Этот проект — прежде всего о структуре, архитектуре и принципах. Основные используемые технологии : Python 3.13, FastAPI, Nginx, Uvicorn, PostgreSQL, Alembic, Celery, Redis, Pytest, FileBeat, LogStash, ElasticSearch, Kibana, Prometheus, Grafana, Docker, Docker Compose.
https://habr.com/ru/articles/908082/
#python3 #fastapi #clean_architecture #filebeat #logstash #elasticsearch #kibana #prometheus #grafana
-
Что такое чистая архитектура в Android и с чем её едят
В данной статье я рассматриваю основы чистой архитектуры: объясняю что, как и зачем делается, привожу примеры реального рабочего приложения и затрагиваю такие темы, как Dependency Injection (в частности - Koin) и MVI (Model View Intent). Подойдет как тем, кто только начинает разбираться в мире андроида, так и тем, кто уверен в своих силах, но хочет найти что-то новенькое.
https://habr.com/ru/articles/896602/
#чистая_архитектура #clean_architecture #android #kotlin #koin #mvi