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架构控制器上的大动作方法的主要内容,如果未能解决你的问题,请参考以下文章
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)