我正在尝试实现基本控制器、应用程序服务、存储库设计。我是这个级别的 OO 设计的新手,但已经完成了它。剩下的障碍是如何处理扩展我的基本控制器。
我的目标:
- 有一个可以独立存在的基本控制器......即您可以从它继承一个特定的控制器,但它本身是空的并让它工作。
- 在我需要扩展基本控制器的情况下,可以在特定控制器中这样做。
这是我所拥有的:
基本控制器:
public class BaseControllerSingle<TRepository, TViewModelSingle> : BaseController
...
// GET: /InventoryMgmt/ManageItems/Edit/5
public virtual ActionResult Edit(
int id = 0,
string pageTitleNoun = "",
Expression<Func<TRepository, bool>> predicate = null
)
{
TViewModelSingle viewModelSingle = new TViewModelSingle();
ViewBag.Mode = "EDIT";
if (id == 0) //Add new company mode
{
viewModelSingle = _baseAppServSingle.CreateNewViewModel(CurrentUserId);
ViewBag.Header = "Create New " + pageTitleNoun;
ViewBag.Mode = "NEW";
return View(viewModelSingle);
}
//else edit existing record mode
viewModelSingle = _baseAppServSingle.CreateEditViewModel(id, predicate);
ViewBag.Header = "Edit " + pageTitleNoun;
return View(viewModelSingle);
}
还有我的特定控制器。请注意这里的代码是不正确的(特别是“ItemViewModel viewModel = actionResult(ItemViewModel);”......但试图展示我正在尝试的内容,这本质上是从操作结果中提取视图模型,进一步操作它,然后返回它。
public class ManageItemsController : BaseController
...
// GET: /InventoryMgmt/ManageItems/Edit/5
public ActionResult Edit(int id = 0)
{
ActionResult actionResult = GetBaseControllerSingle().Edit(
"Material",
id,
x => x.Id == id && x.CompanyId == CurrentCompanyId);
ItemViewModel viewModel = actionResult(ItemViewModel);
if (id == 0)
{
viewModel = _manageItemsAppServ.CreateNewViewModel(viewModel, CurrentCompanyId);
}
viewModel.DDLOptions = _manageItemsAppServ.CreateFilterOptionsViewModel(CurrentCompanyId);
return View(viewModel);
}