Добавление DomainModel в ссылки на проект пользовательского интерфейса (Domain Driven Design)

в многоуровневой архитектуре DDD предположим, что у нас есть уровень пользовательского интерфейса, который взаимодействует с моделью домена через службу приложений на основе ViewModel. Служба приложений получает общий репозиторий посредством внедрения конструктора.

теперь, на уровне пользовательского интерфейса для внедрения универсального репозитория, нам нужно добавить DomainModel.dll в проект пользовательского интерфейса, поскольку параметр типа универсального репозитория определен в модели предметной области.

Правильно ли добавлена ​​DLL DomainModel к уровню пользовательского интерфейса или на уровне пользовательского интерфейса должна быть ссылка только на AppService.dll?

Например :

 //DomainModel.dll 

 public class StudentEntity
 {
  public long ID {get;set;}
  public string FirstName {get;set;}
  ...
 }

public interface IRepository<T>  where T :class
{
 void Insert(T enity);
 ...
}

//ApplicationService.dll

public class StudentService
{
 private IRepository<StudentEntity> _studentRep;

 public StudentService(IRepository<StudentEntity> studentRep)
 {
  _studentRep=studentRep;
 } 
 ...
}
//UI layer 

public class Main
{

     public class Program
     {
        public void Main(string[] args)
        {
            var studentService=new StudentService(??????);
// here for injecting Generic Repository we need to add domainModel.Dll to ui for access type parameter of generic repository

        }
    }

}

Наилучшие пожелания


person Babak Golkar    schedule 14.01.2018    source источник


Ответы (1)


Используете ли вы объекты предметной области (модели, интерфейсы) на своем уровне пользовательского интерфейса?

Если да, то вам понадобится ссылка на библиотеку вашего домена.

Если нет, то вы сможете создать отдельный проект начальной загрузки, который обрабатывает все DI и предоставляет свой собственный набор объектов для вашего пользовательского интерфейса; вместо этого ваш пользовательский интерфейс может ссылаться на это.

Лично я считаю, что на доменную библиотеку нужно ссылаться ВЕЗДЕ в решении, в конце концов, это центр вашей луковицы.

Мнение: если вы получили уровень предметной области, состоящий из моделей poco, которые сопоставляются 1:1 с вашими таблицами базы данных и набором общих репозиториев CRUD и полагаются на сервисные классы для выполнения всей работы, то вы, возможно, не занимались DDD и только что добавили ненужную абстракцию в ваш DAL.

person Joe    schedule 15.01.2018