Уровень устойчивости между данными и бизнес-уровнем?

#c# #asp.net-mvc #asp.net-core #architecture

#c# #asp.net-mvc #asp.net-ядро #архитектура

Вопрос:

Для школьного проекта мне нужно создать платформу для потоковой передачи фильмов, я решил разработать ее с помощью .net core MVC framework.

В настоящее время моя многоуровневая архитектура выглядит так:

  • Уровень пользовательского интерфейса (MVC)
  • Бизнес-уровень:
    • iMove.cs
    • Movie.cs
    • IMovieCollection.cs
    • MovieCollection.cs
  • Контрактный уровень (для моего DTO)
  • Уровень данных
    • IMovieRepository.cs
    • MovieRepository.cs

MovieRepository.cs Содержит все мои операции CRUD, поэтому в этом классе я получаю все фильмы с GetAll() помощью метода, и именно здесь возникает моя проблема. Поскольку у меня не может быть ссылки от my Business Layer к my Data Layer , потому что это вызовет циклическую зависимость, я никак не могу получить список с фильмами, которые GetAll() возвращает мой метод. Я все еще новичок в многоуровневой архитектуре, поэтому я действительно не знаю, хорошо ли добавлять еще один слой между моим Business Layer и Data Layer тем, где я размещаю свои репозитории с моими операциями CRUD. Может быть, уровень устойчивости?

Я надеюсь, что кто-нибудь может сказать мне, как лучше всего решить эту проблему и почему.

Комментарии:

1. Если вы не разрабатываете что-то 10 лет назад, почти нет веских причин использовать эту устаревшую n-уровневую архитектуру. Просто переключитесь на ЧИСТУЮ архитектуру, для вашего же блага.

2. @CamiloTerevinto не могли бы вы привести пример или ссылку, чтобы увидеть, что такое ЧИСТАЯ архитектура? Звучит очень заманчиво. Заранее спасибо! 🙂

3. Просто google «asp.net базовая чистая архитектура», чтобы найти много-много примеров. Если вы хотите действительно хорошую книгу (ИМХО, конечно), чтобы читать в свободное время, взгляните на Microsoft ASP.NET Основная справочная электронная книга (бесплатно): dotnet.microsoft.com/download/e-book/aspnet/pdf

4. Уровень данных отвечает только за обработку взаимодействия с данными (взаимодействие с базой данных). Бизнес-уровень должен отвечать за обработку бизнес-логики и транзакций приложения, предоставление интерфейсов для взаимодействия с другими уровнями и т. Д.

Ответ №1:

Другие комментарии предлагают перейти на «ЧИСТУЮ архитектуру». Хотя эти замечания справедливы сами по себе, вы упомянули, что это для школьного проекта. Из-за этого я бы посоветовал сосредоточиться на «основах» и двигаться дальше только тогда, когда вы хорошо понимаете, как все работает. Когда у вас будет эта основа, вы можете даже самостоятельно разобраться в недостатках такой настройки!

Чтобы ответить на ваш вопрос: да, обычной практикой является извлечение ваших объектов в отдельный проект, на который могут ссылаться ваш бизнес-уровень и уровень данных. Именование никогда не является точной наукой, но часто этот новый уровень называют доменным уровнем.

Комментарии:

1. И этот «Доменный уровень» будет содержать все мои репозитории с операциями CRUD?

2. @acesteef Нет, вы должны хранить свои репозитории на уровне данных. Только ваши объекты должны быть перемещены на уровень домена. В вашем случае это был бы фильм.

3. Я не совсем понимаю, в чем разница между уровнем домена и моим бизнес-уровнем. Что следует поместить в мой бизнес-уровень, если я перемещу все свои объекты на уровень домена? @ThomasDucheyne