Является ли «Чистая архитектура» Боба Мартина практическим правилом для всех архитектур или это только один из вариантов?


22

Мне очень понравились концепции в видео «Принципы чистой архитектуры» дяди Боба Мартина . Но я чувствую, что этот шаблон похож на комбинацию шаблонов Abstract Factory и Builder по своей сути.

Это один из способов написания хороших программ, но не единственный.

Rails и responsejs - две структуры, которые приходят на ум, которые не продвигают этот вид чистой архитектуры. Rails ожидает, что ваша бизнес-логика будет в моделях ( FatModels и SkinnyControllers ) и будет реагировать внутри ваших компонентов. Оба подхода тесно связаны между собой бизнес-логикой и структурным кодом .

Я не нахожу ничего плохого ни в одном из 3 способов. Это суждение, чтобы выбрать любого.

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

Итак, «Чистая архитектура» Боба Мартина является практическим правилом для всех архитектур или это только один из вариантов?


16
«Чистая архитектура» - это то, что придумал Боб Мартин. Вот и все.
Роберт Харви

2
Возможно, лучший вопрос заключается в следующем: Rails и React чрезвычайно успешны. Что написал Боб Мартин, используя свою Чистую Архитектуру, чтобы сравнить? Я хотел бы знать ответ сам.
user949300

4
Прочитайте блог Джоэла о пяти мирах , и вы поймете, почему не существует «практического правила для всех архитектур».
Док Браун

1
Rails может быть очень успешным для стартапов и прототипирования. Когда приходит время поддерживать и развивать вместе с 50 другими разработчиками - «свобода» Rails становится проблемой, с которой сталкиваются старшие разработчики.
Фабио

Представлено вашему вниманию
Theraot

Ответы:


34

Хотя «Чистая архитектура» хороша и имеет много преимуществ, важно помнить, что:

  • «Чистая архитектура» - это в основном ребрендинг Роберта Мартина и развитие связанных с ним подходов, таких как «Луковая архитектура» Джеффри Палермо (2008) и «Шестиугольная архитектура» («Порты и адаптеры») Алистера Кокберна и других (<2008).

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

Предшественником этих архитектур является классический шаблон MVC от Smalltalk. Это позволяет отделить модель от пользовательского интерфейса (контроллера и представления), чтобы модель не зависела от пользовательского интерфейса. Существует много вариаций MVC, таких как MVP, MVVM,….

Более сложные системы имеют не только один пользовательский интерфейс, но, возможно, несколько пользовательских интерфейсов. Многие приложения предпочитают предлагать API REST, который может использоваться любым пользовательским интерфейсом, например веб-приложением или мобильным приложением. Это изолирует бизнес-логику на сервере от этих пользовательских интерфейсов, поэтому сервер не заботится о том, какое приложение обращается к нему.

Как правило, сервер по-прежнему зависит от внутренних служб, таких как базы данных или сторонние поставщики. Это прекрасно, и приводит к простой многоуровневой архитектуре.

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

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

Все эти подходы имеют свои преимущества , такие как упрощение тестирования системы в отдельности (путем замены всех внешних систем, с которыми она взаимодействует, на фиктивные реализации). Они упрощают предоставление нескольких реализаций для одного вида сервиса (например, добавление второго процессора платежей) или замену реализации сервиса (например, переход от базы данных Oracle к PostgreSQL или переписывание службы Python в Go). ,

Но эти архитектуры - Ferrari архитектур: дорогие, и большинству людей они не нужны. Дополнительная гибкость чистой архитектуры и т. Д. Достигается за счет большей сложности. Многие приложения и особенно веб-приложения CRUD не получают от этого пользы. Имеет смысл изолировать вещи, которые могут измениться, например, с помощью шаблонов для генерации HTML. Не имеет смысла выделять вещи, которые вряд ли могут измениться, например, резервную базу данных. Что может измениться, зависит от контекста и потребностей бизнеса.

Рамки делают предположения о том, что будет меняться. Например, React предполагает, что дизайн и поведение компонента меняются вместе, поэтому разделять их не имеет смысла. Немногие фреймворки предполагают, что вы можете захотеть изменить фреймворк. Как таковые, фреймворки действительно предоставляют определенную блокировку. Например, зависимость Rail от (очень самоуверенного!) Шаблона Active Record делает невозможным или невозможным изменение вашей стратегии доступа к данным (часто превосходящей) модели репозитория. Если ваши ожидания изменений не соответствуют структуре, лучше использовать другую структуру. Многие другие веб-фреймворки не делают никаких предположений о доступе к данным.


20
Примечание: у Роберта С. Мартина есть эта печальная тенденция представлять что-то как лучшую вещь и предполагать, что это единственный разумный подход. Он обычно не совсем не прав. Но он часто пропускает обсуждение потенциальных недостатков и склонен к гиперболе. В результате его советы вводят в заблуждение. Поэтому лучше полностью игнорировать все, что он говорит.
Амон

2
Мне нравится слышать подобные заявления, потому что очень часто я нахожу людей, которые слепо пытаются следовать каждой мелочи, которую он говорит. По крайней мере, если бы я придерживался подхода «это один способ, который часто работает, но всегда настороженно», я бы чувствовал себя к нему лучше, но я не могу сказать, что я фанат Роберта Мартина
jleach

6
Это забавно, потому что я вспоминаю, как он подчеркивал, что его решение было не единственным в книге. Затем он рассказал о своем решении более подробно. Лично меня не интересуют некоторые его посты, но «Чистая архитектура» очень понравилась для чтения.
Bitsoflogic

2
@bitsoflogic Это приятно знать! Т.Б. Я не читал его книг, и мое мнение основано на его беседах, статьях и вопросах людей, которые читают его материалы. До сих пор я видел больше примеров, когда ему не хватает заметных нюансов. Это реальная проблема, если учесть, что Чистый Код широко продается молодым разработчикам, которые пока не могут выразить свое мнение в контексте. Его разговор о Чистой Архитектуре (этот вопрос основан на записи), кажется, не обсуждает ограничения. Для целевой аудитории это хорошо, для любого, кто считает его «авторитетом», это вводит в заблуждение точку зрения.
Амон

1
@amon Мне бы очень хотелось, чтобы кто-нибудь более подробно рассказал о времени и месте для многих моделей и архитектур. Они обычно связаны с решением определенной проблемы, будь то из-за языка кодирования или бизнес-потребностей, однако дискуссии всегда сосредоточены на том, «как реализовать». Что касается книги, его знание истории кодирования (пережив ее) смогло дать уникальный взгляд на вещи. Тем не менее, я думаю, что вы в основном найдете ту же проблему в книге, которую вы видели на переговорах.
Bitsoflogic

24

Мне очень понравились концепции в видео «Принципы чистой архитектуры» дяди Боба Мартина. Но я чувствую, что этот шаблон похож на комбинацию шаблонов Abstract Factory и Builder по своей сути.

Даже не близко.

Когда вы смотрите на это:

введите описание изображения здесь

Вы смотрите на дизайн графа объекта. Это диктует, что знает о чем. Чего не хватает в этой истории, так это того, как был построен этот объектный граф. Извините, но вы не найдете этого здесь. Там нет никаких упоминаний о строительстве.

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

На самом деле, я мог бы построить все, что вы видите на этой диаграмме в основном. Затем просто вызовите один метод для одного объекта, чтобы все началось.

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

введите описание изображения здесь

И вы можете построить все это, даже не уходя main().

Я бы порекомендовал использовать сборщики и фабрики, когда вы хотите разбить кучу процедурного кода конструкции на красивые кусочки концептуального размера. Но в чистой архитектуре или любой другой архитектуре модных слов нет ничего, что требовало бы этого. Так что, если вы хотите придерживаться main(), хорошо. Просто, пожалуйста, помилуй .

Является ли «Чистая архитектура» Боба Мартина практическим правилом для всех архитектур или это только один из вариантов?

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

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

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

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

Но в видео я чувствую, что он предполагает, что чистая архитектура должна иметь четкую границу между бизнес-логикой и фреймворками. Фреймворки (web, android и т. Д.) Должны быть плагинами, которые подключаются к бизнес-логике. Он даже тонко издевается над рельсами на видео.

Вы правы. Он делает. Дядя Боб считает, что фреймворки можно рассматривать как библиотеки. И они могут. Но даже это решение стоит вам чего-то.

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

Пока ваши потребности предвидятся рамками, все будет идти очень гладко. Приятно предвидеть ваши потребности. Он помещает вас в коробку, в которой все просто. Просто пойми, что ты сдаешь, чтобы получить это. Если вы будете распространять Spring повсюду, вы больше не сможете рекламировать его как работу на Java. Это работа на Java / Spring. Я мог бы сказать то же самое о Ruby и Rails, но Rails съел обед Ruby давным-давно.


4

Цитировать видео:

«Вы не хотите выполнять слияния в SQL».

с последующим:

«Я на самом деле видел хранимую процедуру SQL, которая была целым слиянием почты»

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

Что не является обязательным, так это проблемы, которые архитектура пытается решить.

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

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


2

«Чистая архитектура», безусловно, «только» один из вариантов. Я бы сказал, что это один из плохих вариантов для большинства проектов, особенно для объектно-ориентированных проектов.

Вот анализ за предложением статьи дядюшки Боба о чистой архитектуре с предложениями за предложениями:

Чистая архитектура с объектно-ориентированной точки зрения


1

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

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


это , кажется, не предлагает ничего существенного по точкам , сделанных и объяснено в 4 предыдущих ответах
комар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.