#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