DDD как управлять связанными сущностями и как использовать в RootAggregate - PullRequest
0 голосов
/ 07 января 2020

Я довольно новичок в 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

Вопросы

  1. Правильно ли управление объектом?
  2. Ссылка (ID) на объект, создаваемый в RootEntity правильный? Или я должен указать объект (BookType)?
  3. В EF Core я также использую RowVersion, как я могу использовать его в DDD, поскольку он указан c для базы данных?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...