ASP.NET Core MVC: как реализовать принцип SOLID при создании бизнеса и модели?

#dependency-injection #asp.net-core-mvc #repository-pattern

Вопрос:

Я создал ASP.NET Основной проект MVC. Он имеет класс репозитория и уровень бизнес — логики.

Я создал интерфейс для класса репозитория и еще один для класса BLL.

С контроллера я вводлю класс BLL, и он обращается к хранилищу для получения данных.

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

Так что теперь я в некотором замешательстве. Я думаю, что контроллер должен иметь доступ к бизнесу и хранилищу, и то, и другое должно быть введено с контроллера. Контроллер должен получать данные из класса репозитория и передавать их в BLL. Вместо этого контроллеры получают доступ только к bll, а затем bll обращается к классу репозитория.

Мне нравится знать, какому подходу следовать, который имеет больше смысла, и учитывать хорошую практику. Я попытался провести исследование, но не смог получить прямого ответа на свой вопрос.

Спасибо

Ответ №1:

Наличие верхнего класса (контроллера), вводимого с двумя другими классами (bll и репозиторием), не обязательно сделает его более «НАДЕЖНЫМ», чем наличие этого верхнего класса, вводимого со средним классом (bll), и наличие среднего класса, вводимого с нижним классом (репозиторием). Оба способа отражают три класса, каждый из которых несет свою собственную ответственность.

То, с чем вы имеете дело, — это вопрос дизайна. Если вы используете класс репозитория только для извлечения данных, а не для бизнес-процесса (как вам следует), то этот класс фактически является частью вашего бизнес-потока, поэтому его следует ввести в bll.

С другой стороны, если класс репозитория занимается бизнес-вопросами, он фактически функционирует как bll, и в этом случае у вас есть два класса bll, введенных в контроллер. Все в порядке? в какой-то степени, да. Но я предпочитаю иметь один класс bll, в который я бы ввел две (bll-)службы. И, вероятно, каждая служба должна быть снабжена, ну, хранилищем.