MVC架构控制器上的大动作方法

Posted

技术标签:

【中文标题】MVC架构控制器上的大动作方法【英文标题】:MVC architecture large action method on controller 【发布时间】:2014-02-13 15:27:10 【问题描述】:

我目前正在开发 Controller 的 ActionResult 函数中的业务逻辑,我注意到它变得笨拙...很大...涉及很多页面上下移动。

代码包括填充分配给 ViewBag 属性的下拉列表的列表,但大部分大小都占用了 EF(linq 到实体)并在内存处理中。 最后通过 Auto Mapper 发送到视图模型。

移动此代码的最佳位置在哪里?在 Controllers 文件夹中的另一个类中?还是在另一个文件夹中的另一个类中,即业务层?

【问题讨论】:

据我了解,您没有数据访问层。如果有,您可以将所有数据处理代码移至该层,从而减轻您的控制器的负担。 我有模型和视图模型,并且一直认为这意味着我有一个数据访问层 (DAL)。但是,如果 DAL 旨在包含业务逻辑,那么您是对的,我没有 DAL。如果是这样,您/任何人可以向我指出 DAL 最佳实践吗?谢谢。 如果您有 DAL,那么我认为移动代码“包括填充分配给 ViewBag 属性的下拉列表的列表,但大部分大小都占用了 EF(linq to实体)”到那里。 这里所有的好答案!!!每个帖子都回答了我的问题。很难决定。 【参考方案1】:

将您的项目分离到:

WebUI(视图、控制器-A MVC 项目) 业务层(承载业务逻辑-类库项目) 数据访问层(持有实体模型(可能是 EDMX)- 类库项目)

业务层WebUI项目调用方法的控制器。 如果业务需要从数据库中获取数据,就会调用数据访问层。

【讨论】:

【参考方案2】:

有趣的是,我回答了一个非常相似的问题yesterday. 简而言之,将控制器限制为将模型与视图链接起来的最低逻辑。业务逻辑、数据访问等最好放在单独的存储库中。

【讨论】:

【参考方案3】:

Bappi Datta 是对的。让我从我的角度解释一下。

我对 libs AutoMapper, EF 的最佳实践是:

Web - 包括渲染逻辑、一些验证、引导配置。调用业务层方法和类。 Web.Models - 具有验证属性的 Web 模型 BusinessLogic - 业务层。包括映射 EF 实体 Web.Models。使用数据类。 数据 - 我总是在这里放置 EF 模型和上下文。存储库模式的实现也可以放在那里。

【讨论】:

【参考方案4】:

您需要拥有存储库层(您提到您已经拥有),然后您需要拥有一个服务层,它可能使用命令工厂和外观等模式来保存所有必要的业务逻辑。那么为了让你拥有一个灵活且易于插拔的架构,你需要使用Dependency Injection between all layers。

Read about MVC architecture in my perspective

在整体 MVC 架构本身的理论讨论中可能存在不同的 If 和 But。但通常您的控制器操作需要精简,您的业务逻辑需要位于存储库之外的不同层中。

【讨论】:

依赖注入...我将不得不研究这个并在服务层完成时实施。谢谢,我听说过这个,但从来没有研究过。还有很棒的网站字符串!

以上是关于MVC架构控制器上的大动作方法的主要内容,如果未能解决你的问题,请参考以下文章

MVC(ASP.NET MVC)带3层架构如何协同工作?

无法让 @Secured 在 Spring MVC 中工作

无法让 Angular 控制器在 MVC 布局中工作

不同控制器上的.NET MVC调用方法

.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

在 MVC 结构中工作时,DAO 是不是与 Model 相同? [复制]