4

可能是一个愚蠢的问题:

我在应用程序数据库中有许多参考表,我想从我的 MVC3 站点对其进行更新。

我可以为这些表中的每一个创建一个具有 CRUD 方法的“ReferenceController”

或者

我可以为这个引用表(实体)创建一个具有 CRUD 方法的“EntityController”。

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


编辑:

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

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

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

您可以使控制器方法通用并具有 Create(T ...) 吗?

4

3 回答 3

4

我会做这样的事情:

一个通用的 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

于 2012-07-03T06:18:51.193 回答
3

每个聚合 root应该有一个存储库。同样代表控制器。

于 2012-06-28T10:24:44.627 回答
1

想到两件事:

  1. 使用类似 WEB API 的东西,这样您就不必为每个实体重新创建样板代码。
  2. 只为顶级实体创建类似 CRUD 的控制器,即为任何客户端都无法更改的东西创建控制器的意义何在。
于 2012-07-03T04:24:58.593 回答