Я все еще изучаю чистую архитектуру и сейчас пытаюсь реализовать в проекте сбор событий. У меня есть 2 проекта, один из которых содержит команды и события, а другой - модель предметной области. По определению чистой архитектуры доменная модель является центром всего. Все ссылается на него. Но все примеры, которые я нашел, показывают, что в модели предметной области есть Apply
методы для каждого события.
Нужно ли мне это делать в модели предметной области? Или есть другой способ?
В какой-то момент кода мне нужно восстановить модель предметной области по событиям примерно так:
public void Load(events){
foreach(var event in events)
{
Apply(event);
}}
Это должно быть в классе модели предметной области, например в методе Apply
. Метод Apply изменяет внутреннее состояние модели предметной области.
1 ответ
все примеры, которые я нашел, показывают, что в модели предметной области есть методы Apply для каждого события. Нужно ли мне это делать в модели предметной области?
Вам не «обязательно» делать это, но это вероятный результат в дизайне Kingdom of Nouns. Поскольку большая часть раннего развития предметно-ориентированного дизайна (Java) и источников событий (C #) происходила в Королевстве существительных, примеры, как правило, разделяют эти шаблоны.
В шаблоне Apply
вы видите результат двух разных идей.
Во-первых, идея о том, что все модели с источником событий имеют одинаковую базовую структуру данных (Истина - это история событий), поэтому мы должны использовать единую общую реализацию общего назначения для всех из них.
Во-вторых, информация, которую мы кэшируем в модели данных (также известная как «свойства» объекта модели), должна выглядеть «одинаково» независимо от того, смотрим ли мы на исходный объект, обработавший команду, или вместо этого смотрим на копию этой модели. загружается из истории.
Таким образом, возникла закономерность, согласно которой модели имеют тенденцию «наследовать» от некоторого базового класса, который владеет историей событий и API для координации изменений как в истории, так и в собственном внутреннем кэше моделей, и что обработчики команд на модели работают, сначала вычисляя, что должны произойти изменения (события), затем применить эти изменения с использованием тех же путей кода, которые использовались бы при перезагрузке истории событий.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.