C# DDD с EF Core использует одну и ту же сущность/агрегат домена для таблицы сопоставления или отдельного класса [закрытC#

Место общения программистов C#
Ответить
Anonymous
 C# DDD с EF Core использует одну и ту же сущность/агрегат домена для таблицы сопоставления или отдельного класса [закрыт

Сообщение Anonymous »

Я не знаю, какой вариант из этих двух наиболее подходит.
Вариант 1: использовать совокупный корень или объект (агрегированный подобъект) для сопоставления таблицы.

Код: Выделить всё

public class User : AggregateRoot
{
string Name { get; }
string Email { get; }

// Logic ...
}
А теперь настройте сущность EF Core:

Код: Выделить всё

public class EntityTypeConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
// ... map props.
}
}
Вариант 2: продублируйте код и создайте 2 класса, но с собственной областью действия.

Код: Выделить всё

public class User : AggregateRoot
{
string Name { get; }
string Email { get; }

// Logic ...
}

public class UserTable
{
Guid Id { get; }
string Name { get; }
string Email { get; }

// No logic here ...
}

Код: Выделить всё

public class EntityTypeConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
// ... map props.
}
}
При втором варианте я могу хранить свои объекты в одной папке, например EFCoreEntities, и код должен быть чище, но с большим количеством дублированного кода.
При втором подходе мне нужно написать дополнительные преобразователи между UserTable и User (возможно, используя Mapster/automapper)
Например, это будет IUserRepository с метод:

Код: Выделить всё

// Here parameter is an User but have to map into UserTable
Add(User user)
{
var entity = user.MapToUserTable();
dbContext.Users.Add(entity)
// ...
}
Какой вариант вы используете, какие есть преимущества и недостатки?

Подробнее здесь: https://stackoverflow.com/questions/780 ... g-table-or
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»