【问题标题】:Best Structure for ASP.NET MVC SolutionASP.NET MVC 解决方案的最佳结构
【发布时间】:2013-05-03 13:55:45
【问题描述】:

我尝试按照最佳实践方法构建我的最后一个大型 MVC 项目,但不太了解我在做什么。

它有一个数据、业务和 Web (MVC) 项目,但控制器包含大部分代码,数据层使用 NHibernate 并且有几个存储库负责太多事情,而业务层是垃圾场任何不属于其他两个项目的东西。它可以工作,但我觉得它可以设置得更好——我不满意的主要是胖控制器和存储库。

我正在开始一个新项目,该项目可能会变得相当大,因此我会花更多时间来尝试将我的设计提前。阅读更多内容后,我尝试为每个聚合根创建一个存储库,然后在业务层中为表示层中的每个控制器提供一个服务。

我最初的希望是大部分代码都将放在服务中,再加上较小的存储库,这将使我的控制器和数据层保持精简。但到目前为止,这还没有发生。

我读过的所有内容都表明视图模型不应该从业务层返回,而应该填充在表示层中,所以目前我的服务层主要是将模型从我的数据层传递到表示层然后它会执行准备视图模型所需的工作。所以我仍然有胖控制器,加上瘦业务和数据层。

我的表示层也知道我的业务层和数据层,但我认为这种分离的部分目的是减少耦合?

这一切都错了吗?我是否应该停止盲目地遵循我在互联网上阅读的内容,而只是在业务层中准备视图模型,以便我可以将大部分代码移到那里?我应该回到经典的 ASP 吗? :)

【问题讨论】:

  • 尝试以下框架:1) Serenity.is - 可用的最佳快速应用程序开发框架,也是 VSGallery 中评价最高的模板。 Serenity 建立在流行和高质量的开源库之上,包括 Bootstrap、SlickGrid、Dapper 和 JSON.NET。通过将它们与 ASP.NET MVC 和 TypeScript 的强大功能相结合,它提供了一个强大而稳定的应用程序平台。 http://serenity.is/ 2) Asp Net Boiler Plate - ASP.NET Boilerplate 是一个通用应用程序框架,专为新的现代 Web 应用程序而设计。它使用已经熟悉的 t
  • @mijaved 请在这里保持客观。您对这些框架的陈述似乎是从广告中复制粘贴的。它们显然不是对这些工具进行中立、客观评估的结果。

标签: asp.net-mvc-4 structure n-tier-architecture


【解决方案1】:

我在设置项目结构时使用的主要指南是确保我可以将一些 operationcontract 属性添加到业务逻辑层,然后将其托管为 wcf 服务。

如果我能做到这一点,这意味着业务逻辑层已经隔离了我的数据层,并且仅通过传递简单的结构和实体与其客户端进行交互。数据层完全隐藏。

所以我通常的结构是这样的:

Solution
    Business.Contracts (interfaces for bll layer in here)
    Business.Logic     (concrete implementations of contracts in here)
    Business.Entities  (Pocos that bll uses)
    Data.Contracts     (interfaces for dal)
    Data.Sql           (Concrete Sql implementation of contracts)
    Common.Enums       (Enums needed by all projects)
    FrontEnd           (Main mvc app)

所以在这个结构中,我的 mvc 项目只处理业务命名空间和公共命名空间。

然而,当与实体交互时,我倾向于在 mvc 项目中使用我自己的模型来允许我添加注释和前端特定功能,然后我为这些模型提供隐式转换,以便能够与商业实体。

HTH

【讨论】:

  • 所以您的前端知道您的 Business.Contracts 和您的 Business.Entities,您的 Business.Logic 知道您的 Data.Contracts 并且您的 Data.Sql 知道您的 Business.Entities?这是否准确地描述了您布局中的耦合?另外,这种结构能给你带来什么好处?
  • 是的,业务逻辑层与数据层交互。使用这种结构,我可以将前端与数据层隔离开来,这意味着如果我需要拆分 Web 服务器的负载,我可以将业务逻辑层移到 wcf 服务后面并将其托管在不同的服务器上。
猜你喜欢
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 2015-06-08
相关资源
最近更新 更多