Веб-приложение, в котором психотерапевты, специализирующиеся в своей области, могут отвечать на вопросы, заданные им на этой платформе.
Я использовал:
Архитектурное здание
Проект состоит из двух слоев. Уровень персистентности, связанный с базой данных, и базовый уровень, не связанный с базой данных.
Контроллер => Ядро <= Постоянство
Мы можем говорить о такой диаграмме зависимостей. Базовый уровень содержит классы интерфейса. Persistence содержит классы, в которых я определяю эти интерфейсы. На стороне контроллера я использовал класс UnitOfWork , чтобы уменьшить зависимость контроллера от DBContext . Однако, хотя контроллер и был уровнем высокого уровня , он был тесно связан с UnitOfWork, уровнем низкого уровня . Для этого я использовал класс IUnitOfWork . IUnitOfWork определяет полностью абстрактный класс, содержащий IRepository. Затем я сделал класс UnitOfWork зависимым от класса IUnitOfWork . Аналогичным образом я создал зависимость между слоем контроллера и IUnitOfWork .
Контроллер => IUnitOfWork <= UnitOfWork
Теперь высокоуровневый уровень контроллера зависит от абстрактного класса. Аналогично, в UnitOfWork, который является низкоуровневым и детализированным классом, Abstrack стал зависеть от класса. На самом деле я сделал основной уровень полностью независимым. Возросла тестируемость приложения. Кроме того, базовый уровень имеет структуру, независимую от ORM Framework. Изменение, которое необходимо внести в UnitOfWork, не повлияет на слой IUnitOfWork.
С другой стороны, в приложении зависимость DbContext все еще продолжалась на уровне UnitOfWork . Это косвенно вызвало проблему тесной связи между контроллером и DbContext . Для решения этой проблемы я использовал фреймворк внедрения зависимостей . (Нинжект 3.2.1.0)