Domain Services
необходимы, когда у вас есть модель предметной области, потому что есть функции, которые не являются частью ваших сущностей.
Подумайте, например, о Repository
или Factory
. Интерфейс для Repository
, вероятно, будет в вашем Domain Layer
, но реализация в вашем Infrastructure Layer
. С Factory
и реализация, и интерфейс будут в вашем Domain Layer
.
Эти доменные службы используются на уровне вашего приложения. Цель прикладного уровня - убедиться, что все на месте, чтобы модель предметной области могла выполнять свою работу. Это может означать загрузку определенных сущностей из репозиториев и последующий вызов для них функций, специфичных для домена.
Проверка должна происходить внутри Entity. Например, предположим, что у вас есть класс Money
.
public class Money
{
public Money(string currency, int amount)
{
Currency = currency;
Amount = amount;
}
public int Amount { get; set; }
public string Currency { get; set; }
}
Если классу Money
не разрешено иметь отрицательную сумму, где бы вы это подтвердили?
Лучшее место для этого - внутри класса. Сущность несет ответственность за свое состояние. В классе Money
это легко увидеть, но, например, с классом Order
с OrderLines
Order
отвечает за проверку наличия дубликатов OrderLine
элементов, которые следует объединить (экономия затрат на доставку!)
person
Wouter de Kort♦
schedule
06.01.2012