每组实体的每个实体或控制器的MVC3控制器?

时间:2012-06-28 10:08:44

标签: c# asp.net-mvc-3

可能是一个stoopid问题:

我在应用程序数据库中有许多引用表,我希望从我的MVC3站点更新它。

我可以创建一个“ReferenceController”,它为每个表都有CRUD方法

我可以创建一个“EntityController”,它为这一个参考表(实体)提供了CRUD方法。

不确定是否有合理的模式可供使用?


修改

如果我为每个Aggregate创建一个控制器,那么如何命名控制器上的方法?

e.g.
ReferenceController.CreateBusiness();
MyApplication/Reference/CreateBusiness
?

我有多个完全不相关的“参考”实体,这是否意味着一个控制器中有很多方法? 例如列表,创建,读取,更新,删除+确认?

你能使控制器方法Generic并拥有Create(T ...)吗?

3 个答案:

答案 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)

我想到了两件事:

  1. 使用类似WEB API的内容,这样您就不必为每个实体重新创建样板代码。
  2. 仅为顶级实体创建类似CRUD的控制器,即为任何客户端无法更改的内容创建控制器的重点。