C# 每个实体的MVC3控制器还是每个实体组的控制器?
这可能是一个愚蠢的问题: 我在应用程序数据库中有许多参考表,我希望从MVC3站点更新这些表 我可以创建一个“ReferenceController”,其中每个表都有CRUD方法 或 我可以创建一个“EntityController”,它只为这个引用表(entity)提供CRUD方法 不确定是否有一个合理的模式可以遵循C# 每个实体的MVC3控制器还是每个实体组的控制器?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,这可能是一个愚蠢的问题: 我在应用程序数据库中有许多参考表,我希望从MVC3站点更新这些表 我可以创建一个“ReferenceController”,其中每个表都有CRUD方法 或 我可以创建一个“EntityController”,它只为这个引用表(entity)提供CRUD方法 不确定是否有一个合理的模式可以遵循 编辑: 如果我为每个聚合创建一个控制器,那么如何命名控制器上的方法 e.g. ReferenceController.CreateBusiness(); MyApplicatio
编辑: 如果我为每个聚合创建一个控制器,那么如何命名控制器上的方法
e.g.
ReferenceController.CreateBusiness();
MyApplication/Reference/CreateBusiness
?
我有多个完全不相关的“引用”实体,这是否意味着控制器中有大量的方法?
e、 g.列出、创建、读取、更新、删除+确认
您可以将控制器方法设置为泛型并创建(T…)吗?您应该根据创建一个存储库。控制器也是一样。我想到两件事:
我会这样做: 通用Crud存储库,如:
class CrudRepo<TEntity> where T : class{
void All();
void Add(TEntity entity);
void Edit(TEntity entity);
void Delete(TEntity entity);
}
class crudepo,其中T:class{
全部作废();
无效添加(潜在实体);
无效编辑(TEntity实体);
无效删除(潜在实体);
}
然后是一个通用的Crud控制器,如
class CrudController<TEntity> where T : class{
CrudRepository<TEntity> Repository;
[HttpPost]
ActionResult Add(TEntity entity){
Repository.Add(entity);
}
// Similer for other actions
}
class CrudController,其中T:class{
积存库;
[HttpPost]
ActionResult添加(TEntity实体){
添加(实体);
}
//其他行动的相似性
}
对于特定类型的实体,只需扩展CrudController,如:
class StudentController : CrudController<Student>
class StudentController:CrudController
编辑1:
如果您有太多的实体,那么有一些方法可以消除为每个实体继承
CrudController
的需要。您可能想为此编写自定义的ControllerFactory
。我已经研究了存储库/服务模式,所以我可以有一个“ReferencePository+ReferenceService+ReferenceController”,但同样可以有“EntityRepository等…”这是最佳实践吗,即使是在一个简单的应用程序中,是转到存储库/服务/控制器…还是只是控制器?对不起,下一个相关的问题是:如何命名我的方法。e、 g.创建成为CreateBusinessReference,或者添加路由来处理/MyApp/Reference/Business/Create?这是一个很好的方法……因为我的实体是不相关的,所以单个通用存储库将非常好,而且易于实现。(赏金来了…只是在等待20小时的限制)@BlueChippy-Dude还有一件事。请在控制器和存储库之间添加中间业务服务层,由于代码关注点非常分散,如果您必须将MVC 3更改为其他内容,那么在这种情况下,只需要更改web层,而不是从头开始重新编码。@Mohayemin希望现在就实现它,而我的实际CRUD(L)方法没有问题,但不确定如何处理我的服务层:例如,我需要更新,所以我读取一个实体,传递到服务,传递到控制器(作为ViewModel),将更新的ViewModel传递回控制器,返回到服务。。。哪个做什么?它是否让用户读取存储库以获取实体,然后通过Update方法将其传回?