Я пытаюсь реализовать домен Driven Design (DDD) в то время как в то же самое время, используя принципы SOLID конструкции имеют следующий вопрос:Делегирование домена модели поведения за пределами Entity
Если мои объекты домена содержат только состояние и поведенческие методы, связанные с ними внутри вездесущего языка, помещаются в отдельные классы, классифицирует ли это как модель анемии или богатого домена?
Например, вместо того, чтобы это на моем лице:
class Order
{
public virtual void Ship();
}
Я на самом деле это учтен в отдельный класс OO:
class Shipper
{
public virtual void Ship(Order order);
}
С моей точки зрения, это еще внутри «модели», а не уровня сервиса/приложения, поэтому я считаю, что это все равно будет моделью с богатым доменом.
Я, однако, может делегировать вызов получения моего заказа и доставки его внутри слоя службы следующим образом:
class OrderService
{
//private member construction ommitted for brevity
Repository _repository;
ShipOrder _shipper;
public void Ship(int orderId)
{
Order order = _repository.GetOrder(orderId);
_shipper.Ship(order);
}
}
Причина НЕ реализации поведенческой логики внутри домена сущности является то, что его реализация будет идти против принцип единой ответственности, поскольку ответственность моего лица заключается в том, чтобы поддерживать и хранить состояние в моем домене. Однако мое мнение об этом может быть субъективным.
Задать вопрос, что это означает для доставки заказа? Как это влияет на состояние системы? Какие инварианты необходимо применять и какие другие компоненты играют в процессе доставки (например, внешняя система)?В конце может стать ясно, следует ли использовать службу домена или разместить поведение в AR. – plalx