atesting.ru Обзоры Matthias noback об идеальной архитектуре

Matthias noback об идеальной архитектуре

В словаре Даля

м. пласт, лист, ряд, протяжная толща, стлань или слань, настил;
какое-либо вещество, лежащее полосою над или под другим. Земная толща
стелется слоями. Тут глина залегла слоем, промеж слоев известняка и
песку. Слой чернозема. Слюда и все сланцы образованы из слоев, нередко с
чужими прослойками. Пастила наливается слоями. | Слои, сиб. поколение,
колено. Татары считают от Чингис-хана 16 слоев. Слоистый или слойчатый,
лежащий слоями, сложный, из слоев состоящий. Все сланцы слоисты, и
дерево слоисто, оно колется по слоям. Слоистый известняк, плитняк,
лещадь. Слоеватый, то же, но в меньшей степени, с неясными слоями. Аспид
слоист, а песчаник слоеват. Слоить, слаивать что, класть, складывать
слоями. Слоить блиночки с кашей и с яйцами, переслаивать, класть в
переслойку. Слоить тесто, делать слоеное тесто, скать, сучить,
раскатывая его на масле, складывая и снова раскатывая. Слоеные пирожки,
слойки м. мн. перм. Слоение, слойка, действие по глаг. Слойка теста,
сканьё. Слоиться, быть слоиму, слоену; | делиться на слои, лупиться
слоями, казать слоистый склад. Переслоить известь с песком. Прослоить
тесто маслом. Слоитель, -ница, слойщик, -щица, слоящий что-либо.
Слоеобразный, -видный, слоеватый, слойчатый.

В словаре Синонимов

пласт, напластование, наслоение, налет, прослойка; толщина; экзина, интеллигенция, энтобласт, шелуха, эктодерма, эктоплазма, плерома, мазок, аэропауза, хромосфера, штык, протодерма, устой, клямс, экзодерма, ржавчина, туника, перикамбий, тропопауза, штукатурка, дернина, ионосфера, трофобласт, подпочва, полуда, коацерват, очес, подслой, припуск, постель, отслоение, заболонь, эпидермис, гимений, полива, бенталь, криолитозона, камбий, тропосфера, никелировка, экзокарпий, подмалевка, дерматоген, экзосфера, стратосфера, разряд, ряд, гарнисаж, феллема, кора, эндодерма, сиальма, энтодерма, мезопауза, фотосфера, подмалевок, покров, феллодерма, корка, мезосфера, лакировка, рубашка, оксидировка, толща, стеклец, ризосфера, мезодерма, эндоплазма, талик, мезоглея, стратопауза, эндотелий, астеносфера, термосфера, спилок

В словаре Д.Н. Ушакова

СЛОЙ, слоя, мн. слои, ·муж.1. Масса, часть вещества, расположенная горизонтально и соприкасающаяся с поверхностью другой части, пласт. Верхние слои атмосферы. Слой чернозема. Сланцы расположены слоями. Верхний слой воды. Слой варенья в пироге. В глубоких слоях земной коры.2. перен. То, что образовалось поверх другого, что, возникнув позже, покрывает собой другое (·книж. ). В черновиках Пушкина можно установить несколько слоев поправок.| Разновидность, отличающаяся от других часть чего-нибудь (·книж. ). Разные стилистические слои в языке «Слова о полку Игореве».3. перен. Часть общественного класса или общественной группы. Широкие слои населения. «Низший слой маленького общества… живет… иначе, чем аристократия.» М.Горький. «Каждый новый слой еще не вовлеченных в работу рабочих и крестьян, это — наши вернейшие друзья и союзники.» Ленин. «…Мировой экономический кризис развертывает свое разрушительное действие, спуская ко дну целые слои средних и мелких капиталистов…» Сталин (Политический отчет Центрального Комитета XVI съезду ·ВКП(б), 1930 ·г. ).

Изменение режима смешивания

В панели слоев для каждого слоя отдельно мы можем изменить режим. Опция Blend mode (Режим наложения) расположена в верхнем левом углу в панели слоев прямо под вкладками. По умолчанию там установлен режим Normal (Обычные).

Измените режим наложения для корректирующего слоя Hue/Saturation (Цветовой тон/Насыщенность) на Color (Цветность). Посмотрите на изображение, оно стало немного ярче.

Непрозрачность и заливка

У каждого слоя мы можем контролировать уровень прозрачности. Данная опция находится напротив опции режима наложения. Значение Opacity (Непрозрачность) 100% установлено по умолчанию, и оно означает, что мы не можем видеть сквозь данный слой. Измените Opacity (Непрозрачность) для корректирующего слоя на 70%.

Хоть значение непрозрачности снижено незначительно, а первоначальные цвета уже начинают проявляться.

Чуть ниже расположена опция Fill (Заливка), которая так же контролирует значение непрозрачности слоя. В большинстве случаев в работе эти два параметра (Opacity (Непрозрачность) и Fill (Заливка)) дают одинаковый результат, кроме случаев, когда речь пойдет о применении стилей слоя.

Правило зависимостей

Правило зависимостей(сформулированное Robert C. Martin в The Clean Architecture) утвержадет, что на каждом слое приложения вы должны зависеть только от кода текущего или более глубокого слоя. Это значит, что код домена зависит только от себя, код слоя приложения от своего кода или домена, а код инфраструктурного слоя может зависеть от всего. Следуя этому правилу, нельзя сделать в доменном слое зависимость на код из инфрастуруктурного.

Но слепо следовать какому-либо правилу, непонимая в чем его истинный смысл — это довольно глупая затея. Так почему же вы должны использовать правило зависимостей? Следуя этому правилу вы гарантируете, что чистый код слоёв прикладного и доменного слоев не будет завязан на «грязный», нестабильный и непредсказуемый код инфраструктуры. Также, применяя правило зависимостей, вы можете заменить что угодно в инфраструктурном слое не прикасаясь и не изменяя код более губоких слоёв, что даёт нам богатые возможности для ротации и переносимости компонентов.

Этот способ уменьшения связанности модулей известен давно, как Dependency Inversion Principle — буква «D» в SOLID сформулированном Робертом Мартиным: «Код должен зависеть от абстракций, не от реализаций». Практическая реализация в большинстве ооп языков заключается в выделинии публичного интерфейса для всех вещей, от которых вы можете зависеть(интерфейс и будет абстракцией) и создании класса, реализующего этот интерфейс. Этот класс будет содержать детали, не имеющие значения для интерфейса, следовательно этот класс и будет реализацией, о которой говориться в inversion principle.

Маски слоев

Маска — это полутоновое или полноцветное изображение, скрывающее части слоя, на который она наложена. Для полутоновых масок черный, белый и серый цвета обозначают прозрачность маски. Черный цвет обозначает непрозрачные участки маски (через них слой не виден); белый — полностью прозрачные участки маски, а через серые слой виден частично. Вот такая маска, наложенная сверху на слой, и называется слой­маской

Обратите внимание — эти обозначения условны. Если необходимо, цвета можно поменять местами

Тогда белым будут показаны непрозрачные области, черным — прозрачные. Тем не менее, чтобы самому не запутаться с обозначениями, лучше умолчания не изменять.

Внимание!

Маска неприменима к фоновому слою. Перед созданием слой­маски необходимо преобразовать фоновый слой в обычный.

Photoshop позволяет работать с несколькими видами масок: растровыми, векторными и обтравочными.

Растровые слой-маски

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

Рис. 8. Пример растровой слой-маски

Как только вы создадите слой­маску в палитре Слои (Layers), ее миниатюра отобразится не только на слое, но и в палитрах Каналы (Channels) и Свойства (Properties). Палитра свойств предоставляет доступ к дополнительным настройкам параметров маски: плотности, растушевки, уточнения края и инверсии цветов маски. Более того, палитра свойств позволяет работать не только с растровыми масками, которые создаются на основе выделения, но и с векторными, создаваемыми на основе векторного контура.

Векторные слой-маски

Создание векторной маски следует начать с создания контура любым векторным инструментом, например Произвольная фигура (Custom Shape). Причем рисовать фигуру следует в режиме Контур (Path)! После создания векторной фигуры необходимо нажать кнопку Маска (Mask) на панели свойств (рис. 9).

Рис. 9. Создан векторный контур

Замечание

Помимо использования кнопки Маска (Mask), можно, как и в случае с растровой маской, щелкнуть по кнопке добавления маски  в палитре Слои (Layers), но при нажатой клавише Ctrl (в Mac OS — Command)!

Дальнейшая настройка маски происходит в палитре  Свойства (Properties) — рис. 10.

При желании можно обвести контур, например, кистью, а под слой с маской поместить еще какой­нибудь слой (рис. 11).

Рис. 10. У созданной векторной маски изменены Плотность и Растушевка

Рис. 11. Итоговый коллаж, созданный на основе векторной слой-маски

Обтравочные маски

В отличие от масок слоев обтравочная маска создается не на основе выделения или векторного контура, а на основе изображения на слое. Тогда все слои, расположенные выше обтравочной маски, будут маскироваться этим изображением. Для создания обравочной маски можно выполнить команду Создать обтравочную маску (Create Clipping Mask) из меню палитры Слои (Layers) или нажать комбинацию клавиш Alt+Ctrl+G (в Mac OS — Option+Command+G). Также можно навести указатель мыши с нажатой клавишей Alt (в Mac OS Option) на границу двух слоев, а когда указатель поменяется на квадрат с изогнутой стрелкой , щелкнуть мышью. В любом случае будет создана обтравочная группа, состоящая из двух слоев. Изображение нижнего слоя из этой пары превратится в обтравочную маску, а на верхнем слое появится обозначение в виде изогнутой стрелки . Нижний слой иначе называют базовым слоем обтравочной группы. Так, на рис. 12 изображение платья является обтравочной маской для верхнего слоя с фотографией желтых роз.

Рис. 12. Пример обтравочной маски

Создание нового корректирующего слоя

В нижней части панели слоев справа от значка Layer Mask (Добавить слой-маску) находится черно-белый кружок Create new fill or adjustment layer (Создать новый корректирующий слой или слой-заливку).

Нажав на этот значок, должен открыться список. Выберите из него Hue/Saturation (Цветовой тон/Насыщенность).

Этот корректирующий слой позволяет легко менять цвета изображений. В Photoshop CS4 и CS5, элементы для корректирующих слоев появляются в панели настроек. А в CS3 и более ранних версиях они открываются в отдельном диалоговом окне. Активируйте опцию Colorize (Тонирование) и вы увидите, как поменяется цвет на изображении. Далее измените следующие значения Hue (Цветовой тон) 195 и изображение окрасилось в синие тона, Saturation (Насыщенность) 60, изображение приобрело более насыщенный синий цвет. Я не вдаюсь в конкретные подробности, поэтому, если что-то не понятно, то ориентируйтесь по рисунку ниже.

Вот результат после создания корректирующего слоя.

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

В словаре Фасмера Макса

род. п. сло́я, укр. слiй, род. п. слоя́ «волокно», болг. слой «слой, корка льда», словен. slòj, род. п. slójа «грязная лужа; горный пласт, залежь», чеш. lоj «слой, залежь, пласт», слвц. sloj «слой, пласт», польск. sɫój «прожилки в древесине», н.-луж. sɫоj «плошка, миска, жестянка».Первонач. «сливаемое» – *sъlоjь, ср. нало́й «ливень», зало́й «затопленное место», сербохорв. по̀ло̑j «место, подверженное наводнению»; см. лой, лить; ср. Бернекер I, 729; Преобр. II, 323, 387. Менее вероятна реконструкция *slojь и сравнение с др.-прусск. slауаn «санный полоз», лит. šlãjos ж. мн. «сани», šliẽti, šliejù «прислонять», лтш. slìet – то же, др.-инд. c̨ráyati «прислоняет», авест. srауаtē «прислоняется», лат. clinō, -ārе «наклонять», греч. κλί̄νω «прислоняю», ирл. clóin «косой», др.-сакс. hlinôn «прислонять» (Траутман, ВSW 309; М. – Э. 3, 939 и сл.).

Зачем нужны слои

  • Слои помогают спрятать/защитить, то, что находится под ними. Можно воспринимать слой как фильтрующий барьер: данные, передающиеся через него, должны быть провалидированны перед тем как перейти на следующий. Они должны быть приведены к формату, который позволит другим слоям корректно работать с ними. Слой также определяет, какие данные и функции из более глубокого слоя могут быть использованы во внешних.
  • Слои четко разграничивают ответственности, а следовательно расположение классов в вашем коде. Если вы добьетесь строгих договоренностей внтури вашей команды, о том какие слои используются в вашем приложении и за что отвечате каждый из них, то вам всегда будет легко найти нужный класс или определится куда следует добавлять новый, просто зная его предназначение.
  • Благодаря использованию слоев, можно свободно менять приоритет и порядок этапов разработки приложения. Вы можете разрабатывать проект последовательно, начиная от ядра бизнесс логики, накладывая слой за слоем на него. А можно инверсировать процесс и начать с разработки слоя взаимодействия с пользователем. Этот пункт довольно важен для нас, так как благодаря ему можно разработать большую часть приложения до принятия решения о используемой ORM, БД, фреймворке, и т.д
  • Большое количество старого софта содержит код, неразделенный на слои, который можно назвать «спагети» кодом: вы можете вызывать и использовать всё что хотите, любые методы и структуры в любой части проекта. Используя систему слоев(правильным образом) можно добиться высокого уровня разделения ответсвенности( separation of concerns). Если вы задокументируете эти правила и будете следить за их соблюдением на код ревью, то вы здорово уменьшите скорость скатывания вашего проекта в ранг гавнокода «технического долга»
  • Вы, конечно же, пишите тесты. Грамотная спроектирвоанная система слоёв, невероятно упрощает тестирование. Различные типы тестов подходят для кода из разных слоев. Назначения каждого теста становится более очевидным. Набор тестов в целом становится более стабильным и более быстроработающим.

    Однако, у нас есть паникёр из твиттера:ООП версия спагетти кода — это код лазанья, с переизбытком слоев.

Лично я никогда не встречал код-лазанью, зато видел очень много лапшекода. Правда бывало, что я писал код, в котором допускал серьезные архитектурные ошибки, и неверно разделял приложение на слои, что приносило некоторые проблемы. В этой статье я описываю, как мне кажется, наилучший набор слоев, большая часть из которых описана в книге Vaughn Vernon «Implementing Domain-Driven Design»(ссылка ниже). Прошу заметить, что слои не имеют жесткой привязки к DDD, хотя они и дают возможность создавать чистые доменные модели, при соответсвующем желании у разработчика.

Архитектура: отсрочка технологических решений

Применяя предложенный набор слоёв вместе с правилом зависимостей, можно получить много плюшек при разработке:

  • Можно много эксперементировать, прежде чем принимать такие важные решения, как, к примеру «используемая СУБД». Также можно спокойно использовать разные базы данных для разных случаев в рамках работы с одной и той же моделью.
  • Можно отложить решение об используемом фреймворке. Это не позволит стать «приложением Symfony» или «Laravel проектом» в самом начале разработки.
  • Фреймворки и библиотеки будут размещены на безопасном расстоянии от кода модели. Это здорово поможет при обновлении мажорных версий этих фреймворков и библиотек. Это также позволит минимизирвоать изменения в коде и трудозатраты, если вы когда-нибудь захотите использовать, к примеру, Symfony 3 вместо Zend Framework 1.

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

В словаре Синонимы 4

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

Виды слоев

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

Фоновый

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

Для фонового слоя нельзя изменить режим наложения, непрозрачность, заливку. К нему нельзя применить ни один слоевой эффект (пока слой блокирован), а кроме того, его нельзя переместить инструментом Перемещение (Move).

Все изображения, которые вы снимаете фотоаппаратом или создаете в результате сканирования, имеют единственный фоновый слой.

Чтобы получить доступ к изменению свойств фонового слоя, необходимо преобразовать его в обычный слой. Для этого достаточно в палитре Слои (Layers) произвести по его строке двойной щелчок и нажать кнопку OK в автоматически открывшемся окне Новый слой (New Layer). Тогда значок замка исчезнет со строки слоя, а его имя поменяется на Слой 0 при условии, что вы не задали другого имени в окне создания нового слоя.

Для обратного преобразования обычного слоя в фоновый необходимо выполнить команду  Слои (Layer) → Новый (New) → Преобразовать в задний план (Background From Layer).

Корректирующие

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

Для создания корректирующего слоя используется кнопка в виде черно­белого круга на палитре  Слои (Layers), которая раскрывает список, содержащий имена коррекций: Уровни (Levels), Кривые (Curves), Цветовой баланс (Color Balance) и т.д. В результате появляется палитра Свойства (Properties), в которой происходит настройка параметров слоя (рис. 13).

Рис. 13. Палитра свойств для коррекции Уровни

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

Рис. 14. Пример использования корректирующего слоя. Слева — исходное изображение

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

Слой 3(обертка для прикладного) — Инфраструктура

Код, написанный в предыдущем слое, тоже не вызываается никем кроме тестов. И только после добавления инфраструктурного слоя, приложение становится рельно пригодным к использованию.

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

  • Работы с HTTP
  • Общением с БД
  • Отправкой емэйлов
  • Отправку пушей
  • Получением времени
  • Генерации случайных чисел
  • И т.д и т.п

Код этого слоя надо покрывать интеграционными тестами(в терминологии Freeman and Pryce). Здесь вы тестируете всё по настоящему — настоящая база, настоящий вендорский код, настоящие внешние сервисы. Это возволяет убедиться в работоспособности тех вещей, которые не находятся под вашим контролем но используюся в вашем приложении.

Копирование слоя

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

Находясь над значком, отпустите кнопку мыши. Копия слоя появится над оригиналом. В результате Photoshop сделал копию фонового слоя и присвоил ему название Background Copy (Фон копия)

Обратите внимание, что новый слой стал активным

Теперь я хочу применить пару фильтров для размытия слоя Background Copy (Фон копия). Вот, что получилось после применения нескольких фильтров.

Посмотрите на изображение вам покажется, что все изображение размыто, но это не так. Размытие было применено только к слою Background Copy (Фон копия), так как он был активный (был выделен синим цветом). А теперь посмотрите на миниатюры двух слоев, вы увидите, что слой оригинал не был затронут.

Вкладка Layers

В верхней части панели слоев имеется отдельная вкладка Layers (Слои). По ней-то мы и определяем, что данная панель именно для слоев.

Вы, наверно, заметили, что рядом имеются две другие вкладки Channels (Каналы) и Paths (Контуры), они отображаются серым цветом.

Эти две панели сгруппированы с панелью Layers (Слои). На самом деле панелей в Photoshop очень много и, если их все отобразить на экране, то они просто закроют всю рабочую область и работать в такой обстановке будет не комфортно. Именно поэтому производители Adobe Photoshop решили оставить только небольшую группу из нескольких панелей для экономии места.

Чтобы переключиться на другую панель в этой группе, нужно просто нажать на нужную вкладку. Но, несмотря на то, что все вкладки находятся в одной группе, панели Channels (Каналы) и Paths (Контуры) не имеют никакого отношения к панели Layers (Слои). Кроме одного факта, что они так же широко используются в Photoshop. Так, что пока мы конкретно рассматриваем панель слоев, другие вкладки мы можем игнорировать.

Группировка слоев

Ранее мы узнали, что для удобства в работе с большим количеством слоев можно давать осмысленные названия каждому слою. Другой путь заключается в группировке слоев. В нижней части панели слоев есть значок папка Create a New Group (Создать новую группу). Но имеются и другие способы создания группы.

При нажатии на этот значок в панели слоев появится группа в виде слоя, но она будет пустая. Нам потребуется перетащить нужные слои в эту папку. Опять повторюсь, что если вы работаете с большим количеством слоев, то это неудобно и отнимет много времени. Конечно, это не страшно, но существует более удобный способ. Допустим, я хочу поместить в эту группу размытый и корректирующий слои, для этого нужно их выделить, удерживая клавишу Shift.

После того, как вы выбрали, какие слои будете группировать, нажмите на значок меню в верхнем правом углу панели слоев (в более ранних версиях Photoshop значок меню выглядит как маленькая стрелочка). В открывшемся меню слоев выберите New Group from Layers (Новая группа из слоев).

После этого на экране появится диалоговое окно New Group from Layers (Новая группа из слоев), в котором вы можете изменить название группы, а также некоторые другие параметры. Затем нажмите на кнопку ОК, чтобы принять настройки по умолчанию или какие-либо изменения, если вы что-то изменили.

Photoshop создает новую группу, дает ей название по умолчанию Group 1 (Группа 1) и перемещает два выбранных слоя в эту группу. Вы можете открыть папку и посмотреть, что находится внутри и снова закрыть, чтобы панель слоев была удобной для работы. Чтобы открыть папку нужно нажать на маленький треугольник слева от значка папки.

Чтобы снова закрыть группу, так же нажмите на значок маленького треугольника.

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

Заключение

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

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

Осталось более подробно рассмотреть инфраструктурный слой. Так мы плавно перейдем к теме гексагональной архитектуры(порты и адаптеры). Но всё это, в следующей части.

Дальнейшее чтение

  • Growing Object-Oriented Software Guided by Tests by Steve Freeman and Nat Pryce
  • Screaming Architecture by Robert C. Martin
  • The Clean Architecture by Robert C. Martin
  • Implementing Domain-Driven Design, chapter 4: «Architecture» and chapter 9: «Modules», by Vaughn Vernon

Также можно ознакомиться с Deptrac — инструмент, помогающий соблюдать правила использования слоев и зависиомостей.