Изменения документа Мнение
Редактировал(а) Alexandr Fokin 2026/09/15 13:34
От версии 1.4
отредактировано Alexandr Fokin
на 2026/09/15 12:54
на 2026/09/15 12:54
Изменить комментарий:
К данной версии нет комментариев
К версии 1.1
отредактировано Alexandr Fokin
на 2026/09/15 12:45
на 2026/09/15 12:45
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,27 +1,0 @@ 1 -|= |= |= 2 -| |((( 3 -Мнение автора: на основании своего опыта я выступаю скорее за анемичную модель: когда сущность в основном контейнер для данных, почти не содержащий логику, и наборе команд/сервисов для взаимодействия с ними (и именно на команды ложиться ответственность за сохранение консистентности агрегатов). 4 -\\Для меня вполне допустим следующий вариант: в доменной логике мы не создаем и не редактируем сущности напрямую, а делаем это через ISetter компонент. В контракт конкретного ISetter мы закладываем способы создания и изменения сущности. В таком случае у нас есть компонент, который указывает на контракт и допустимые способы взаимодействия с конкретной сущностью. 5 - 6 -Пример поведения, располагаемого в ISetter: 7 - 8 -1. типизированные билдеры под конкретные сценарии использования (инварианты) 9 -1. взаимодействие со связанными сущностями (родительская-дочерняя) (добавление, смена родительской сущности) 10 -1. вычисляемые свойства (которые меняются при изменении полей). 11 - 12 -У этого подхода еще есть плюс, связанный с [[Expression tree ~| Деревья выражений>>doc:Разработка.NET.C#.Рантайм и типы.Expression tree | Деревья выражений.WebHome]]. А именно мы легко можем строить Expression (например для проекции или Update запроса) (открытые setter). 13 -)))| 14 -| |{{code language="c#"}}// Entity rules (interaction interface) 15 -IEntityServices<TEntity> 16 -{ 17 - // Set rules (single point of editing). 18 - ITEntitySetter Setter { get; } 19 - 20 - // Specification rules 21 - ITEntityConditions Conditions { get; } 22 - 23 - // Discrimination union (OneOf) for invariants. 24 - IOneOf { get; } 25 -}{{/code}}|[[Specification>>doc:Архитектура и модели.Группа\. Архитектурные подходы.DDD | Domain-driven design.Specification.WebHome]] 26 - 27 -