3 мая 2019 в 19:21 (МСК)
| сохранено
4 мая 2019 в 02:35 (МСК)
H Onion aka Clean Architecture
в черновиках
Tutorial
В прошлой своей статье я вскользь упомянул Onion архитектуру. Там было в основном про то что не надо лишние библиотеки и папки создавать, что надо делить код на модули и что можно писать код прямо в контроллер и использовать Entity Framework там же напрямую
НО Домен все равно должен быть отдельно и все вычисления должны быть в нем. Теперь хочу поговорить о луковой архитектуре. Больше всего подходящей для сложного приложения с большим количеством логики. В этой статье в качестве примера я буду использовать игру "
Змейка " потому что в ней достаточно логики для «богатого» домена
Легенда
Красным цветом указана зависимости.
Зеленым цветом указаны важные группы. Под — слои
Синим цветом разделены основные слоим которые желательно держать отдельно
Терминология
ValueObject : Неизменяемое хранилище данных без уникального идентификатор
Entity : Объект c уникальным идентификатором
Aggregate : Объект содержащий в себе Entity. Обладает уникальным идентификатором. Entity одного типа не может быть в двух агрегатах одновременно
DomainServices : Изолирует нас от того что мы используем . Например от ADO.NET, NLogger, Redis, RabbitMQ, AppMetrics, ElasticSearch
ApplicationServices : Изолирует нас от того что использует нас . Например от ASP.NET, gRPC, WCF, WPF, WinForms. Может вызывать DomainServices когда это нужно. Сам почти ничего не делает и не хранит. Только использует Entity, Aggregate, ValueObject и DomainService
Пример: Игра змейка
github.com/VictoremWinbringer/SnakeGameWithOnionAkaCleanArchitecture
Литература
Domain Driven Design – simplifying the complicated
Заблуждения Clean Architecture
комментарии (6)