2016-01-03 1 views
2

У меня есть объект (EF) в DAL, созданный Entity Framework. Как использовать Entity (EF) и EntityDTO с контрактом (интерфейс)

public partial class User : IUser 
{ 
    public Guid Id { get; set; } 

    [Required] 
    [StringLength(20)] 
    public string Login { get; set; } 

    [Required] 
    [StringLength(25)] 
    public string Password { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string Email { get; set; } 

    [StringLength(30)] 
    public string Lastname { get; set; } 

    [StringLength(30)] 
    public string Firstname { get; set; } 

    [StringLength(200)] 
    public string Avatar { get; set; } 

    public Guid? DepartmentId { get; set; } 
    public Guid? RoleId { get; set; } 
    public virtual Department Department { get; set; } 
    public virtual Role Role { get; set; } 
} 

Я создал UserDto в УСК

public class UserDto : IUser 
{ 
    public Guid Id { get; set; } 
    public string Login { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 
    public string Lastname { get; set; } 
    public string Firstname { get; set; } 
    public string Avatar { get; set; } 
    public DepartmentDto Department { get; set; } 
    public RoleDto Role { get; set; } 
    public Guid? DepartmentId { get; set; } 
    public Guid? RoleId { get; set; } 
} 

Для передачи данных между DAL и BLL Я использую контракт (интерфейс)

public interface IUser 
{ 
    Guid Id { get; set; } 
    string Login { get; set; } 
    string Password { get; set; } 
    string Email { get; set; } 
    string Lastname { get; set; } 
    string Firstname { get; set; } 
    string Avatar { get; set; } 
} 

Как в этом случае, для переноса полей навигации между DAL и BLL? Как это:

public virtual Department Department { get; set; } 
public virtual Role Role { get; set; } 

Как лучше сделать:

Удалить контракт (интерфейс) и передачи пользователя (EF) в УСК непосредственно или советом решение, чтобы решить эту проблему. Правильно ли удалить договор (интерфейс) с точки зрения архитектуры?

ответ

0

Самая важная цель создания DTO - потерять пару своих DomainModel от вашего DAL DTO Model, поскольку я получаю вас. Тогда совершенно неверно снова связывать их с интерфейсом.

Я советую вам использовать ту же модель EF, что и ваш DomainModel, и использовать ее в своем BLL, если у вас нет большого и сложного проекта, тогда все в порядке, чтобы быть более строгим для реализации DDD, имея реальный богатый DomainModel.

В этом случае вы должны передать свой DomainModel на свой DAL и ничего больше, и все данные должны быть внутри вашего DAL. Затем вы можете использовать некоторый инструмент, например, AutoMapper или просто ручное картирование

Смежные вопросы