Entity or ValueObject?

190
13 июня 2018, 01:20

Только начал вникать в DDD Есть две сущности оператор и диалог. У оператора есть параметр Сектор, к которому относится оператор. У диалога тоже есть такой параметр, определяет, на какой сектор поступило обращение. По BL диалог может, отработать не обязательно оператор того же сектора. В данном случае Sector будет Value Object или Entity? Для оптимизации, то в таблице диалогов нет смысла хранить полное инфо о секторе, тогда Sector будет отдельной таблицей с полем id? И если есть уже id то это уже сущность? В дальнейшем, может появится ещё 1 сектор. Вот здесь и запутался.

public class Operator // Entity
{
    public int Id { get; }
    public string Name { get; }
    public Sector Sector { get; }
    //ctor
    //methods
}
public class Dialog // Entity
{
    public int Id { get; }
    public string Name { get; }
    public int OperatorId { get; }
    public Sector Sector { get; }
    //ctor
    //methods
}
public class Sector // Entity? ValueObject?
{
    public string Name { get; }
    public Address Address { get; }
}

С Address я уже понял, что это будет ValueObject, т.к. по бл мне не важно это, только наличие его.

Answer 1

ValueObject - уникальная и взаимозаменяемая штука.

Обычно это что-то элементарное, вида статус таски (В работе, закрыта, черновик).

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

Если сектора например создаются на создании базы данных, а потом оператор (или кто ещё) может их только выбирать из готового списка - скорее всего сгодится ValueObject.

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

Плюс, учитывая неизменность ValueObject-ов, они часто зашиваются на уровне разработки, в отличие от сущностей.

READ ALSO
Не могу сконвертировать dataGridView в таблицу байтов

Не могу сконвертировать dataGridView в таблицу байтов

ЗдравсвтуйтеТакая проблема, открываю xlsx файл, записываю данные с него(предположительно только цифры) в datagridview, а потом хочу с этого datagridview...

219
C#. Как исправить ошибку NullReferenceException? [дубликат]

C#. Как исправить ошибку NullReferenceException? [дубликат]

На данный вопрос уже ответили:

206
Нужна ли БД для Telegram бота? [закрыт]

Нужна ли БД для Telegram бота? [закрыт]

Нужно написать Telegram бота с личным кабинетом в котором будет баланс пользователя и специально сгенерированная строка для реферальной ссылкиМожно...

192