Например, возьмите этот объект домена, который представляет сетевое устройство:
Код: Выделить всё
public class NetworkDevice {
public IPAddress IpAddress { get; set; }
}
Эрик Эванс описывает в своей знаменитой синей книге, что доменная служба должна представлять собой модель без сохранения состояния, реализующую методы, взятые из языка ubiquitos, для выполнения запроса, который объект или репозиторий не могут обработать самостоятельно. Но что, если службе необходимо с сохранением состояния?
Простой пример: приложению необходимо отслеживать настроенные IP-устройства в сети, чтобы уведомлять другое приложение внутри домена о событиях состояния. Если IP-устройство регистрируется внутри приложения (например, хранится в базе данных), «служба ping» получает уведомление и начинает отслеживать устройство.
Код: Выделить всё
public class PingMonitor : IDisposable,
IHandle,
IHandle
{
public List _devices = new List();
public void Handle(DeviceRegisteredEvent @event) {
_devices.Add(@event.Device);
}
public void Handle(DeviceRemovedEvent @event) {
_devices.Remove(@event.Device);
}
public void PingWorker() {
foreach(var device in _devices) {
var status = Ping(device.IpAddress);
if(status != statusBefore)
DomainEvents.Raise(new DeviceStateEvent(device, status));
}
}
}
Что это за компоненты? Сначала я подумал, что это доменные службы, потому что они удовлетворяют определенным требованиям домена. Однако они с сохранением состояния, а также не представляют конкретно язык ubiquitos (задача ping-службы состоит в том, чтобы пинговать объект домена и сообщать о его статусе, однако ping-service не реализует метод, который позволил бы клиентам пинговать устройство).
Являются ли это службами приложений? Как такие компоненты помещаются в шаблон DDD?
Подробнее здесь: https://stackoverflow.com/questions/222 ... fit-in-ddd
Мобильная версия