Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每个实体的MVC3控制器还是每个实体组的控制器?_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 每个实体的MVC3控制器还是每个实体组的控制器?

C# 每个实体的MVC3控制器还是每个实体组的控制器?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,这可能是一个愚蠢的问题: 我在应用程序数据库中有许多参考表,我希望从MVC3站点更新这些表 我可以创建一个“ReferenceController”,其中每个表都有CRUD方法 或 我可以创建一个“EntityController”,它只为这个引用表(entity)提供CRUD方法 不确定是否有一个合理的模式可以遵循 编辑: 如果我为每个聚合创建一个控制器,那么如何命名控制器上的方法 e.g. ReferenceController.CreateBusiness(); MyApplicatio

这可能是一个愚蠢的问题:

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

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

我可以创建一个“EntityController”,它只为这个引用表(entity)提供CRUD方法

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


编辑:

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

e.g.
ReferenceController.CreateBusiness();
MyApplication/Reference/CreateBusiness
?
我有多个完全不相关的“引用”实体,这是否意味着控制器中有大量的方法? e、 g.列出、创建、读取、更新、删除+确认


您可以将控制器方法设置为泛型并创建(T…)吗?

您应该根据创建一个存储库。控制器也是一样。

我想到两件事:

  • 使用类似WebAPI的东西,这样就不必为每个实体重新创建样板代码
  • 仅为顶级实体创建类似CRUD的控制器,即为任何客户端都无法更改的对象创建控制器有什么意义

  • 我会这样做:

    通用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方法将其传回?