Доступ к репозиторию через Сервис или напрямую? - PullRequest
1 голос
/ 23 августа 2009

Является ли это хорошим стандартом кодирования, позволяющим действиям контроллера ASP.NET MVC напрямую обращаться к репозиторию (даже если для тяжелой работы присутствует служебный уровень, например, LoginService.Authorize ()), для получения, добавления или обновления данных? Или все должно пройти через службу и оттуда в хранилище?

Ответы [ 4 ]

4 голосов
/ 23 августа 2009

Для небольших приложений / сетей я не использую сервисный уровень, потому что он просто отображает методы репозитория 1: 1, и я теряю KISS. Но, в конце концов, это зависит от бизнес-модели; репозиторий абстрагирует доступ к БД, а сервисы инкапсулируют логику.

2 голосов
/ 23 августа 2009

Лучше пройти уровень обслуживания (в зависимости от того, как вы его реализовали), потому что в этом суть - быть единой точкой доступа, таким образом, любые бизнес-вещи, которые вы там делаете, представлены и реализовано для всех абонентов.

1 голос
/ 08 сентября 2009

Это действительно зависит от сложности. Если вы имеете дело с какой-либо областью видимости транскрипции , я бы определенно отделил это от контроллера до уровня обслуживания.

0 голосов
/ 27 июля 2017

На мой взгляд, это будет зависеть от вашего дизайна / архитектуры. Какова цель хранилища? Выполните CRUD операции (создание, чтение, обновление и удаление).

Если вы используете модели анемичных доменов в классической трехуровневой архитектуре, вся логика, применяемая к моделям, создается в сервисах. В этом случае выбор очевиден: вы не должны вызывать хранилище напрямую. Зачем ? Поскольку ваши модели глупы и логика в сервисах, вы можете создавать недопустимые модели. Если вы можете вызвать хранилище, вы можете создать / обновить неверную модель в базе данных. Если вы позвоните в службу, она сможет исправить или заполнить вашу модель, прежде чем создавать / обновлять ее.

Если вы используете модель rich domain в луковой архитектуре, то она другая. Так как ваши модели должны быть всегда действительными (когда вы создаете их из конструктора или из фабрики, все проверки были выполнены, и когда вы обновляете одну из них, это одно и то же), вы можете без каких-либо проблем вызывать непосредственно хранилище. В этом контексте вся логика находится в моделях напрямую, а сервисы просто используются для хранения логики, которая не принадлежит конкретной модели.

Теперь вопрос не в том, «как использовать репозиторий», а в том, «какой дизайн / архитектура мне нужен?» и на первый вопрос будет дан ответ: -)

...