我的asp.net MVC應用程序有一個區域「公司」和一個區域「管理員」。在不同地區非常相似的控制器的最佳實踐
公司可以在公司區域的用戶上做CRUD。我在公司區域爲此創建了一個UsersController。 管理員可以在管理員區域的公司用戶上執行CRUD。我在Admin區域爲此創建了一個CompanyUsersControllers。
這兩個控制器都有非常相似的代碼,我想知道什麼最乾淨的方法是重用大部分代碼。
在寫這個問題時,我想我可以用虛擬ActionResults創建一個抽象的UsersControllerBase類。我這樣做,它適用於公司地區。我在UsersController類的重寫方法上定義屬性,並在每個重寫方法中調用相應的抽象方法。
這裏是從基類的例子:
[UsersControllerBase.cs]
public virtual ActionResult Edit(string slug)
{
var user = UserRepository.GetBySlug(slug);
if (user.CompanyId != CurrentUser.CompanyId)
{
throw new SecurityException(CurrentUser.Id + " attempted to edit a user that does not belong to his company");
}
var model = user.ToViewModel();
AddListsTo(model);
return View(model);
}
以及相應的控制裝置:
[Company/UsersController.cs]
[HttpGet, GET("/company/users/{slug}/edit")]
public override ActionResult Edit(string slug)
{
return base.Edit(slug);
}
的問題是,在管理/ CompanyUsersController.cs編輯有一個額外的參數「companySlug 「這是用來找到我們目前正在編輯用戶的公司。 正如您在上面的代碼中看到的,在Company/Userscontroller.cs中,我們只需從CurrentUser派生出公司。
什麼是最好的方法來處理這個問題?
td; dr 我有2個控制器具有名稱相同的動作,它們具有接近相同的方法體但參數不同。我想盡可能重用代碼。請問我如何c#。
我會放棄我認爲的想法..這似乎不值得。我可以嘗試通過使控制器更輕量一些來重用某些部件。感謝您的回覆! –