Обычно в приложениях используются различные конечные точки, использующие одну и ту же бизнес-логику. Что мы должны делать в этом сценарии? Мы можем легко скопировать одну конечную точку и вставить ее в другую, но после изменения бизнес-кейса нам нужно будет изменить всюду в нашем коде.
В пользу разделения проблем, контроллеры должны иметь логику «кода», а другой уровень должен иметь «бизнес-логику». Например. Контроллеры могут определять, как называются свойства, но не как долго имя пользователя. Имя пользователя должно быть длинным как минимум 3 символа, независимо от того, какие контроллеры пытаются зарегистрировать пользователя.
Вся эта операция с моделями сущностей для удовлетворения требований бизнес-кейсов должна быть перенесена на отдельный слой. Обычно называется уровнем обслуживания.
Чтобы все ваши контроллеры могли использовать любую из этих служб, не зная из бизнес-сценария.
Простым примером здесь являются два действия контроллера - одно из - редактирование собственного профиля, а другое - администратор, редактирующий произвольный профиль пользователя.
[Authorize]
public IActionResult Edit(UserViewModel model) {
if(model.Id != this.CurrentlyLoggedUser.Id) {
return this.RedirectToAction(...);
}
var userService = new UserService(); // inject maybe
userService.EditById(model.Id, model);
return this.View();
}
и админ действие
[Authorize("Admin")]
public IActionResult Edit(UserViewModel model) {
var userService = new UserService(); // inject maybe
userService.EditById(model.Id, model);
return this.View();
}
Логика "код" здесь - создать сервис, вызвать инкапсулированный редактирования логики. Также некоторые соображения безопасности, о которых следует позаботиться, - Authorize
и Authorize Admin
.
Знаете ли вы о территориях MVC? – DavidG
Я думаю, что реальный вопрос заключается в том, что вы используете 'Areas', как вы можете избежать чистого дублирования кода, если вам нужна панель администратора, чтобы выглядеть как обычное приложение + другое административное устройство –
@RoyalBg спасибо за ваши уведомления. кажется, это то, что я ищу – VSB