Мне очень понравились концепции в видео «Принципы чистой архитектуры» дяди Боба Мартина. Но я чувствую, что этот шаблон похож на комбинацию шаблонов Abstract Factory и Builder по своей сути.
Даже не близко.
Когда вы смотрите на это:
Вы смотрите на дизайн графа объекта. Это диктует, что знает о чем. Чего не хватает в этой истории, так это того, как был построен этот объектный граф. Извините, но вы не найдете этого здесь. Там нет никаких упоминаний о строительстве.
Вы можете построить все это без абстрактных фабрик и застройщиков. Я знаю, потому что я сделал это . Я даже не собирался избегать их. Я их люблю. Просто мне они не нужны. Я просто использовал передачу ссылок. Инъекция зависимости - это причудливый термин для этого.
На самом деле, я мог бы построить все, что вы видите на этой диаграмме в основном. Затем просто вызовите один метод для одного объекта, чтобы все началось.
Теперь вещи должны существовать, прежде чем вы сможете столкнуть их в другие вещи. Я исследовал это здесь и дал ему эту симпатичную небольшую диаграмму:
И вы можете построить все это, даже не уходя main()
.
Я бы порекомендовал использовать сборщики и фабрики, когда вы хотите разбить кучу процедурного кода конструкции на красивые кусочки концептуального размера. Но в чистой архитектуре или любой другой архитектуре модных слов нет ничего, что требовало бы этого. Так что, если вы хотите придерживаться main()
, хорошо. Просто, пожалуйста, помилуй .
Является ли «Чистая архитектура» Боба Мартина практическим правилом для всех архитектур или это только один из вариантов?
Я считаю Чистую Архитектуру модным словом, используемым для привлечения людей к блогу и книге. Этот блог и книга содержат очень хорошие объяснения очень похожих старых архитектур с более старыми именами, которые используются для привлечения людей к старым блогам и старым книгам. В частности, лук, а также порты и адаптеры. Ни один из которых не является единственными архитектурными вариантами, которые у вас есть.
Мне нравится дядя Боб, потому что он потрясающий оратор и автор. Он заставляет меня думать о вещах, которых у меня не было бы иначе. Но если вы позволите этому превратить вас в религиозного фанатика, который настаивает на том, что все должно быть сделано по-своему, вы быстро обнаружите, что обновление документации - самое близкое, что я позволю вам добраться до моего кода.
Архитектуры модных слов полезны, когда у вас есть долгоживущий код, который должен сохраняться, пока мир вокруг него меняется. Вот когда это светит. Если мир стабилен по сравнению с кодом, то вы делаете вещи причудливыми без веской причины.
Неважно, насколько удивительным кажется что-то, есть контекст, в который вы можете поместить это, что сделает это абсурдом. Извините, это тоже не серебряная пуля.
Но в видео я чувствую, что он предполагает, что чистая архитектура должна иметь четкую границу между бизнес-логикой и фреймворками. Фреймворки (web, android и т. Д.) Должны быть плагинами, которые подключаются к бизнес-логике. Он даже тонко издевается над рельсами на видео.
Вы правы. Он делает. Дядя Боб считает, что фреймворки можно рассматривать как библиотеки. И они могут. Но даже это решение стоит вам чего-то.
Мистер Мартин пытается сохранить пространство, в котором ваш общий язык все еще остается общим. Вы отказываетесь от этого, когда распространяете рамки повсюду. Когда вы делаете это, вы идете по пути превращения вашего языка в нечто, называемое языком, специфичным для предметной области. HTML - это предметно-ориентированный язык. Он делает свою работу очень хорошо, но есть другие работы, которые он не может делать вообще.
Пока ваши потребности предвидятся рамками, все будет идти очень гладко. Приятно предвидеть ваши потребности. Он помещает вас в коробку, в которой все просто. Просто пойми, что ты сдаешь, чтобы получить это. Если вы будете распространять Spring повсюду, вы больше не сможете рекламировать его как работу на Java. Это работа на Java / Spring. Я мог бы сказать то же самое о Ruby и Rails, но Rails съел обед Ruby давным-давно.