Изменения документа Мнение

Редактировал(а) Alexandr Fokin 2026/09/15 13:34

От версии 1.6
отредактировано Alexandr Fokin
на 2026/09/15 13:22
Изменить комментарий: К данной версии нет комментариев
К версии 1.1
отредактировано Alexandr Fokin
на 2026/09/15 12:45
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -1,54 +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 -| |(((
15 -|{{code language="c#"}}// Entity rules (interaction interface)
16 -interface IEntityServices<TEntity>
17 -{
18 - // Set rules (single point of editing).
19 - ITEntitySetter Setter { get; }
20 -
21 - // Specification rules
22 - ITEntityConditions Conditions { get; }
23 -
24 - // Discrimination union (OneOf) for invariants.
25 - ITEntityOneOf { get; }
26 -}{{/code}}|{{code language="c#"}}interface ITEntitySetter
27 -{
28 - TEntity Create1(Create1Param parameters);
29 - TEntity Create2(Create2Param parameters);
30 -
31 - void SetProperty1(TEntity entity, TValue propertyValue);
32 -
33 - void SetProperty2(TEntity entity, Property2Param parameters);
34 -}
35 -
36 -interface ITEntityCondition
37 -{
38 - bool IsCondition1(TEntity entity);
39 -
40 - bool IsCondition2(TEntity entity, Conditition2Params params);
41 -}
42 -
43 -interface ITEntityOneOf
44 -{
45 - void Process(
46 - TEntity entity,
47 - Action<TInvariant1Dto> invariant1Handler,
48 - Action<TInvariant2Dto> invariant2Handler)
49 -}{{/code}}
50 -
51 -
52 -)))|[[Specification>>doc:Архитектура и модели.Группа\. Архитектурные подходы.DDD | Domain-driven design.Specification.WebHome]]
53 -
54 -