通常在應用程序中有不同的終端使用相同的業務邏輯。我們應該在這種情況下做什麼?我們可以輕鬆地複製一個端點並將其粘貼到另一個端點,但是一旦業務案例發生變化,我們就需要更改代碼中的任何地方。
爲了分離問題,控制器應該有「代碼」邏輯,另一個層應該有「業務」邏輯。例如。控制器可能會定義如何命名屬性,但不定義用戶名的長度。無論哪個控制器嘗試註冊用戶,用戶名至少應爲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