可能是一个stoopid问题:
我在应用程序数据库中有许多引用表,我希望从我的MVC3站点更新它。
我可以创建一个“ReferenceController”,它为每个表都有CRUD方法
或
我可以创建一个“EntityController”,它为这一个参考表(实体)提供了CRUD方法。
不确定是否有合理的模式可供使用?
修改
如果我为每个Aggregate创建一个控制器,那么如何命名控制器上的方法?
e.g.
ReferenceController.CreateBusiness();
MyApplication/Reference/CreateBusiness
?
我有多个完全不相关的“参考”实体,这是否意味着一个控制器中有很多方法? 例如列表,创建,读取,更新,删除+确认?
你能使控制器方法Generic并拥有Create(T ...)吗?
答案 0 :(得分:3)
我会做这样的事情:
Generic Crud Repository,如:
class CrudRepo<TEntity> where T : class{
void All();
void Add(TEntity entity);
void Edit(TEntity entity);
void Delete(TEntity entity);
}
然后是一般的Crud Controller
class CrudController<TEntity> where T : class{
CrudRepository<TEntity> Repository;
[HttpPost]
ActionResult Add(TEntity entity){
Repository.Add(entity);
}
// Similer for other actions
}
对于特定类型的实体,只需将CrudController扩展为:
class StudentController : CrudController<Student>
修改1:
如果你真的有很多实体,有办法消除为每个实体继承CrudController
的需要。您可能需要为此编写自定义ControllerFactory
。
答案 1 :(得分:2)
每个aggregate root应该有一个存储库。同样代表控制器。
答案 2 :(得分:1)
我想到了两件事: