Какое место в DDD занимают долговременные «сервисы» с сохранением состояния?C#

Место общения программистов C#
Ответить
Anonymous
 Какое место в DDD занимают долговременные «сервисы» с сохранением состояния?

Сообщение Anonymous »

В большинстве приложений, связанных с промышленностью или автоматизацией (которые в основном полагаются на внешние компоненты, которыми им приходится управлять), вы часто сталкиваетесь с тем, что домен содержит модели, которые являются не просто абстракциями от реальной проблемы, но также представлениями и указателями на что-то, что физически существует за пределами домена.

Например, возьмите этот объект домена, который представляет сетевое устройство:

Код: Выделить всё

public class NetworkDevice {
public IPAddress IpAddress { get; set; }
}
Вместо того, чтобы просто хранить или проверять такие сущности или предпринимать действия при их изменении, приложению может потребоваться управлять внешними компонентами на основе их представлений внутри домена. Итак, подходит ли DDD для таких случаев? Являются ли это доменными службами менеджеров?

Эрик Эванс описывает в своей знаменитой синей книге, что доменная служба должна представлять собой модель без сохранения состояния, реализующую методы, взятые из языка 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»