Я довольно новичок в DDD, я прочитал книгу Эри c Эванса и создаю небольшое приложение, используя DDD, но у меня есть несколько вопросов, связанных с управлением сущностями.
Сценарий
Например, у меня есть сущность:
public class BookType
{
public int Id {get; set; }
public string Title {get; set; }
public bool IsValid get => ...
}
И совокупность root:
public class Book
{
public int Id {get; private set; }
public string Title {get; private set; }
// omitted
public int BookTypeId {get; private set; }
public Book(string Title, int bookTypeId)
{
// code
}
// other methods to update fields
}
Из книг и блогов я понимаю:
Entity
Концепция инкапсуляции с «частными» полями НЕ должна «применяться» к сущности, но должна рассматриваться как сущность БД, следовательно, «publi c setter» и в репозитории:
public int Add(BookType entity)
{
if (entity.IsValid)
// code
}
public void Update(BookType entity)
{
if (entity.IsValid)
// code
}
public void Delete(int id)
{
// code
}
На объекте я создал метод Validate
, поскольку у полей есть установщики, и я не могу проверить поля при создании.
Агрегат Root
В агрегат Root (Книга) Я применил инкапсуляцию с частными установщиками, и при создании я указываю требуемый идентификатор BookType
Вопросы
- Правильно ли управление объектом?
- Ссылка (ID) на объект, создаваемый в RootEntity правильный? Или я должен указать объект (BookType)?
- В EF Core я также использую RowVersion, как я могу использовать его в DDD, поскольку он указан c для базы данных?