#software_design

2025-08-07

RUG — малоизвестный, но фундаментальный принцип Clean Code

Многие разработчики при обсуждении основ Clean Code называют одни и те же принципы — чаще всего упоминаются DRY , KISS и YAGNI . Эти концепции прочно закрепились в профессиональном сообществе и воспринимаются как обязательная часть хорошего кода. Принцип RUG упоминается значительно реже. Чаще всего о нём узнают с опытом, а многие применяют его интуитивно, даже не подозревая, что для этого подхода существует отдельное название и формулировка. Сегодня я хочу поговорить о принципе RUG и о том, какие рекомендации он даёт по написанию программного обеспечения. RUG ( Repeat Until Good ) — это принцип, который говорит: можно повторять один и тот же код, пока это разумно. На ранних этапах разработки важнее просто реализовать логику, исходя из текущих требований, чем пытаться сразу создать «идеальную» абстракцию. В этот момент задача — как можно быстрее получить рабочее решение, которое отражает текущие знания о системе. Но со временем, когда одна и та же логика начинает встречаться всё чаще, становится очевидно, что её удобнее и правильнее выделить в отдельную, чётко оформленную абстракцию, чтобы избежать дублирования и упростить дальнейшую поддержку. Мы используем этот принцип каждый раз, когда пишем код. Ведь практически любую логику можно сделать более абстрактной и масштабируемой — вопрос лишь в том, когда наступает подходящий момент для этого. Я буду использовать TypeScript , так как этот язык знаком большинству разработчиков. 😁

habr.com/ru/articles/934986/

#rug #cleancode #programming #software_design #patterns #refactoring #typescript

2025-07-15

[Перевод] Архитектурные принципы

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

habr.com/ru/articles/927550/

#architecture #software_design #архитектура_приложений #дизайн_программного_обеспечения #архитектура_по #принципы_проектирования #проектирование_систем #architecture_principles #принципы_разработки

2025-06-24

Преодоление сложности в самом сердце Анемичной Модели

Доброго времени суток, Хабр! Сегодня хотел бы поговорить об анемичной модели — одном из самых дискуссионных топиков (особенно для приверженцев DDD) и о том, как, по моему мнению, правильно её готовить. Для кого-то анемичная модель — это антипаттерн, тогда как для других это единственный правильный способ реализации приложений. Многие использовали её годами и даже не знали, как она называется, и что кем-то она считается антипаттерном. Реальность же такова, что анемичная модель — это инструмент, который может подходить или не подходить в зависимости от ситуации, но при этом является очень популярным и, по факту, «стандартом де-факто» для многих программистов и организаций. Хотя в последние годы я и вижу тенденцию к тому, что DDD и, соответственно, богатая доменная модель становятся всё популярнее, пока что, по моему мнению, им далеко до популярности анемичной модели.

habr.com/ru/articles/917012/

#ddd #software_design #anemic_model #refactoring #architecture #java #oop #web_development #domain_driven_design #functional_programming

2025-06-10

Minimal API: Избавляемся от устаревающих контроллеров в ASP.NET Core

Я, думаю, многие уже слышали о появившихся в .NET 6 Minimal API - легковесной замене контроллеров/MVC. Кто-то уже успел ознакомиться и задался вопросом: "Ваше API в 3 строчки, это, конечно, здорово, но как это будет работать в реальном проекте с сотнями эндпоинтов, кучей фильтров, аттрибутов, расширениями OpenAPI/Swagger и прочих радостях?" В этой статье я хочу ответить на этот вопрос: пройдемся от основ, преимуществ, недостатков, и закончим нюансами работы и проблемами, которые обязательно возникнут при миграции с контроллеров на Minimal API в крупном проекте. А забегая чуть вперед: если думаете, стоит ли переводить проект на Mini API, вот вам сразу полезная информация: они могут жить в проекте вместе, причем даже без дублирования инфраструктуры: не обязательно переводить все разом - подробнее под катом. Бонусом, заменим SwaggerGen на реализацию OpenAPI от Microsoft.

habr.com/ru/articles/917378/

#c# #net #minimal_api #mvc #api #software_design #openapi #swagger

2025-06-08

Vertical Slice Architecture на примере C# — простая и удобная архитектура для небольших (и не только) пректов

Простой вопрос: делая задачу, касающуюся API - вы чаще работаете с одним эндпоинтом, или пишите, условные, репозитории, которые используются сразу в нескольких эндпоинтах? Скорее всего, первое, тогда почему мы разбиваем проект по слоям, а не по фичам (эндпоинтам)? Это видно в часто используемых нынче архитектурных подходах: Layered, Clean Architecture, Onion, и так далее. Не буду выделять что-то конкретное и объясню общую разницу в подходах: Vertical Slice Architecture (VSA) строится вокруг каждого отдельного feature-слайса (эндпоинта, как самый простой пример), а не на вокруг слоев. То есть, если код относится к конкретному эндпоинту, мы не размазываем его по всему проекту в папках Commands/Services/Repositories/DTOs и т.п., а кладем в одно место, там где и будет находиться эндпоинт Главный принцип - уменьшаем связанность между слайсами (фичами), увеличиваем связанность внутри слайса

habr.com/ru/articles/916704/

#c# #vertical_slice #minimal_api #архитектура #net #software_design

2025-02-26

[Перевод] Классы проектирования против классов анализа

Статья представляет собой перевод статьи отсюда , на которую я натолкнулся в процессе изучения темы системного проектирования. В системном дизайне понимание разницы между классами проектирования (design classes) и классами анализа (analysis classes) носит ключевой характер. Классы анализа подобны детективу — они исследуют и понимают проблему. Они сфокусированы на том, что система должна делать, без погружения в то, как именно это должно быть реализовано. Эти классы помогают разработчикам понять требования к программе и ее цели. В то время как классы проектирования подобно архитектору берут результаты изысканий классов анализа и создают план, как именно система будет работать.

habr.com/ru/articles/885906/

#software_design #oop #analysis #theory

2025-02-13

エディタ選びのポイント、ITエンジニア人生を左右するツールのいろは——Software Design 2025年3月号の特集記事を先行公開
gihyo.jp/article/2025/02/choos

#gihyo #技術評論社 #gihyo_jp #Software_Design #Vim #Emacs #VS_Code #Editor

2024-09-25

Пример создания Full Stack проекта, используя функциональное тестирование как инструмент дизайна

Зачастую full stack (и не только) проекты создаются без функциональных тестов. Это вызвано ошибочным предположением, что тесты добавляются для уже готового продукта и они нужны только для поддержки качества. Необходимость в тестах также возникает, когда количество багов или жалоб пользователей переходит все границы. В такой ситуации разработчики проекта решают добавлять тесты, и тут выясняется, что это не так просто, как большинство думает. Проблема сложности тестов в подобной ситуации кроется в том, что на этапе проектирования продукта никто не думал о его тестировании и необходимости сделать его пригодным для тестирования (автоматического). На этапе проектирования самого продукта гораздо проще проектировать тесты, потому что вы не ограничены существующим кодом продукта, фреймворками и утилитами, входящими в состав продукта. В этой части статьи я на примере покажу, как можно спроектировать простое веб-приложение, используя функциональное тестирование, и имплементировать веб-приложение. Поехали!

habr.com/ru/articles/846046/

#automationtesting #functional_testing #web_developement #tdd #architecture #fullstack_development #software_development #software_design

2024-04-14

I've been talking about App & Architecture Modernization, Service Blueprints, etc, but I've not been very good at writing about it. Thanks to my good friends @crichardson and @diana I plan to!

Here’s my first post:

domainanalysis.io/p/applicatio

#architecture_design modernization #software_design

2023-09-30

Is your codebase in need of a makeover? SOLID principles are your solution. Join us as we dissect these principles, learn how you can revamp your software development process.

Check out the full article👇
blog.lab.sa/what-are-solid-pri







2023-06-17

A Field Study of the Software Design Process for Large Systems
(1988) : Curtis, Bill Krasner, Herb Isc...
DOI: doi.org/10.1145/50087.50089

2023-06-11

A Field Study of the Software Design Process for Large Systems
(1988) : Curtis, Bill Krasner, Herb Isc...
DOI: doi.org/10.1145/50087.50089

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst