Исходный код вики Мнение
Версия 1.3 от Alexandr Fokin на 2026/09/15 12:51
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
1.3 | 1 | |= |= |= |
| |
1.2 | 2 | | |((( |
| 3 | Мнение автора: на основании своего опыта я выступаю скорее за анемичную модель: когда сущность в основном контейнер для данных, почти не содержащий логику, и наборе команд/сервисов для взаимодействия с ними (и именно на команды ложиться ответственность за сохранение консистентности агрегатов). | ||
| 4 | \\Для меня вполне допустим следующий вариант: в доменной логике мы не создаем и не редактируем сущности напрямую, а делаем это через ISetter компонент. В контракт конкретного ISetter мы закладываем способы создания и изменения сущности. В таком случае у нас есть компонент, который указывает на контракт и допустимые способы взаимодействия с конкретной сущностью. | ||
| 5 | Пример поведения, располагаемого в ISetter: 1) типизированные билдеры под конкретные сценарии использования (инварианты), 2) взаимодействие со связанными сущностями (родительская-дочерняя) (добавление, смена родительской сущности), 3) вычисляемые свойства (которые меняются при изменении полей). | ||
| 6 | |||
| 7 | У этого подхода еще есть плюс, связанный с [[Expression tree ~| Деревья выражений>>doc:Разработка.NET.C#.Рантайм и типы.Expression tree | Деревья выражений.WebHome]]. А именно мы легко можем строить Expression (например для проекции или Update запроса) (открытые setter). | ||
| |
1.3 | 8 | )))| |
| |
1.2 | 9 | | |{{code language="c#"}}// Entity rules (interaction interface) |
| 10 | IEntityServices<TEntity> | ||
| 11 | { | ||
| 12 | // Set rules (single point of editing). | ||
| 13 | ITEntitySetter Setter { get; } | ||
| 14 | |||
| 15 | // Specification rules | ||
| 16 | ITEntityConditions Conditions { get; } | ||
| |
1.3 | 17 | }{{/code}}|[[Specification>>doc:Архитектура и модели.Группа\. Архитектурные подходы.DDD | Domain-driven design.Specification.WebHome]] |
| |
1.2 | 18 | |
| 19 |