Я просто пытаюсь выйти из своей комфортной зоны типичной архитектуры хранилища/службы/презентации N-Tier и начал изучать DDD с помощью агрегатов, и я должен признать, что я «м немного смущены и надеялся, что кто-то может прояснить следующий пример:Как моделировать агрегаты и сохраняться в базе данных в DDD
Если бы я имел Entity под названием News, NewsImage и клиентов, которые были все EF сохраняются, способные объекты, как так:
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class NewsImage
{
public virtual int Id { get; set; }
public virtual byte[] Data { get; set; }
public virtual News News { get; set; }
}
public class News
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<NewsImage> NewsImages { get; set; }
public virtual Customer Customer { get; set; }
}
в I понять, что это могут быть объекты, которые мы будем использовать для сохранения объектов домена в базе данных, но если мы используем агрегаты из домена mod эш мы могли бы иметь что-то вроде этого:
public class NewsAggregate
{
public int Id { get; set; }
public string Name { get; set }
public void AddImageToNews(byte[] imageData)
{
// Hide NewsImage or that object and add the byte[] data here?
}
}
Моих вопросов следующие, и я был бы признателен за любые разъяснения, как я уверен, я недопонимание основных принципов здесь:
- только агрегированные объекты должны подвергаться к слою презентации (или к любому поглощающему слою).
- Как обрабатывать преобразование/сохранение агрегированных объектов в базу данных, я мог бы использовать сопоставление, которое прекрасно, но затем, как я узнаю, создаю ли я объект или обновление (по тому, является ли оно временным, если идентификатор установлен или не?). Как узнать, были ли добавлены новые изображения и какие обновления или удаления? Я думаю, что проблема, с которой я столкнулась, - это вызов, чтобы передать агрегат новостей в репозиторий и создать его, я мог бы вернуть агрегат обратно из домена, заполненного через объекты EF, а затем добавить изображение, когда я передаю агрегат новостей назад, как я могу узнать, что изменилось для создания/обновления данных?
- Куда должен идти клиент, должен ли он быть на агрегированном объекте новостей в качестве метода AddCustomer, должен ли быть элемент CustomerAggregate, который имеет метод AddNews, и с обеими этими параметрами, как упорствовать?
Большое спасибо за любой проницательности, я читал вокруг и глядя на примеры проектов, которые демонстрируют концепцию, но, кажется, не в полной мере объяснить лучшие способы для достижения этой цели.