Разработка через домен: обнаружение изменений (.NET) - PullRequest
0 голосов
/ 27 декабря 2011

Я только что начал с Domain Driven Design и пытаюсь применить его для моего текущего проекта.

Я начал с чисто доменной модели и теперь привязался к своему слою доступа к данным.У меня есть полностью самодельный уровень доступа к данным, поэтому ни один из хорошо известных инструментов ORM не может быть применен здесь.

Не могу понять, что делать с обновлениями.Допустим, у меня есть следующие объекты:

public class Document : Entity
{
    public IPropertiesCollection Properties { get; set; }

    public IContents Contents { get; set; }
}

public class PostalDocumentsPackage : Entity
{
    public String Name { get; set; }

    public DateTime DeliverDate { get; set; }

    public ICollection<Document> Documents { get; set; } 
}

У меня есть соответствующие репозитории IDocumentsRepository и IPostalDocumentPackagesRepository для получения объектов (на данный момент).

Проблема, с которой я сейчас сталкиваюсь, заключается в ситуации, когда я хочу добавить новый документ или сделать коллекцию документов PostalDocumentsPackage.В основном я вижу два возможных случая:

1) Реализация коллекции, которая отслеживает изменения в исходной коллекции и содержит списки элементов, которые были обновлены \ удалены.

2) Реализация отдельных методов в хранилище длядобавление документов в пакет.

Интересно, эти подходы в порядке или могут вызвать проблемы в будущем?или есть другие альтернативы?

1 Ответ

0 голосов
/ 27 декабря 2011

Обычно отслеживание изменений будет обрабатываться ORM, например, NHibernate. В вашем случае вы можете сделать следующее:

  • Выбор новых документов на основе значения свойства удостоверения.
  • Выполните оператор удаления SQL перед повторной вставкой в ​​таблицу.

Проблема любого из этих подходов заключается в том, что сбор документов может быть большим, поэтому загрузка всех документов для каждого PostalDocumentsPackage может быть узким местом. Также вы должны подумать, нужно ли вам отслеживать изменения в сущности Document в дополнение к коллекции документов. Если это так, то вам потребуется реализовать отслеживание изменений и для класса Document. Учитывая, что вы не используете ORM, я бы предложил решение № 2, поскольку решение № 1 приведет вас к пути повторной реализации отслеживания изменений, что, помимо прочего, приведет к загрязнению классов вашего домена. Вы также можете рассмотреть архитектуру CQRS / Event Sourcing , в которой отслеживание изменений сделано явным.

...