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



可能是一个笨拙的问题:

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

我可以创建一个"参考控制器",其中包含每个表的 CRUD 方法

我可以创建一个"实体控制器",它只为这个参考表(实体)创建了一个具有 CRUD 方法。

不确定是否有合理的模式可以遵循?


编辑:

如果我确实为每个聚合创建了一个控制器,那么您如何在控制器上命名方法?

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

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

你能使控制器方法泛型并具有创建(T ...)吗?

我会做这样的事情:

一个通用的 Crud 存储库,如下所示:

class CrudRepo<TEntity> where T : class{
  void All();
  void Add(TEntity entity);
  void Edit(TEntity entity);
  void Delete(TEntity entity);
}

然后一个通用的 Crud 控制器,如

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. 使用类似于 WEB API 的内容,这样就不必为每个实体重新创建样板代码。
  2. 仅为顶级实体创建类似 CRUD 的控制器,即为任何客户端都无法更改的内容创建控制器有什么意义。

最新更新