【问题标题】:Architectural decisions: ASP.NET MVC & Entity Framework架构决策:ASP.NET MVC 和实体框架
【发布时间】:2012-05-17 22:34:45
【问题描述】:

我遇到了架构决策问题: 我们即将构建一个新的应用程序,我们决定使用 ASP.NET MVCEntity Framework(可能首先使用数据库)。在最初的情况下,我们只会为普通浏览器构建一个 Web 应用程序,但将来我们可能会添加移动应用程序。 (SOA?)

我现在的问题是构建应用程序架构的最佳方式是什么?

这是正确的吗?

  1. Mvc 项目
    • 型号
    • 查看
    • 控制器
  2. DAL 项目
    • 包含 edmx 和 T4 模板

我一直在寻找示例、模式和最佳实践,但似乎找不到合适的东西。

谢谢!

【问题讨论】:

  • 如果您打算在某个阶段编写新的前端,还应该将业务逻辑分离出来
  • 确实,这是有道理的。能否举例说明一下?
  • 在您的问题中更多的是关于解决方案结构和技术堆栈,然后是架构。
  • @AlexBurtsev 没错,架构可能不是这里最好的词选择

标签: asp.net-mvc asp.net-mvc-3 entity-framework architecture n-tier-architecture


【解决方案1】:

我通常构建解决方案的方式(编辑适用于 NuGet)

  1. 网站 (MVC)
    • 控制器
    • 观看次数
    • 内容(脚本、CSS、图像等)
  2. 演示模型(对于简单的项目,它会嵌入到网站中)
    • 查看模型
    • 模型映射器
  3. 业务逻辑
    • 规则
    • 本地扩展(Web 和常规)
  4. 数据(如果复杂,请为每个上下文/存储库/模型使用单独的子文件夹)
    • 存储库
    • 实体模型
    • 数据上下文和配置
  5. Web 库(可能作为可通过本地 NuGet 获得的单独解决方案)
    • 扩展(到 MVC/Web 类)
    • 助手类 = 属性
  6. 通用库(可能作为通过本地 NuGet 提供的单独解决方案)
    • 扩展
    • 助手类

依赖关系沿着这个结构向上流动,即上面的东西可能会引用下面的东西,但反之则不然。每个项目我也会有一个单独的测试项目。在某些情况下,我会为使用 NuGet 打包并托管在本地存储库中的 Web/常规类使用外部共享库。

对于移动设备,如果您要通过网络访问,我会使用 jQuery Mobile 和支持移动设备的视图引擎将其直接构建到网站中。如果您正在考虑本地化,那么我将添加一个 WebAPI 层,该层可能会或可能不会与网站共享相同的视图模型以进行 API 交付,并在此结构之外针对 API 开发移动应用程序。 API 很可能有自己的模型,并位于业务层之上的单独堆栈中。在我当前的项目中,我们将数据放在单独的解决方案中,并在单独的解决方案中开发 API 和网站,通过 NuGet 包共享模型。

【讨论】:

  • 您的解决方案结构看起来很简洁,但我无法理解其中包含的某些文件夹类型。例如。 WebSite 和 Presentation 模型、View Model 的分离和它们的集成。您能否指出任何解释演示这些概念的文章或项目?
  • @BigBoss 我还没有写过任何描述这个的文章。这是我个人的喜好,老实说,这是一个“最大”的组织。如果它们没有与单独的 API 项目共享,我可能会将视图模型嵌入到网站(应用程序)项目中。 “通用”库实际上可能是它自己的解决方案并作为 NuGet 包导入。
【解决方案2】:

听起来您的团队还没有足够的信息来做出决定。我知道这就是你在这里问这个问题的原因,但你不应该依赖你得到的任何答案。 ASP.NET MVC 和 EF可能 对您来说是一个很好的解决方案,但您不应该在没有完成 Nerd Dinner 或 Music Store 教程的情况下选择它。

完成此操作后,您将能够回答自己有关架构的问题,并且可能还会发现一些其他问题。

【讨论】:

  • 不客气。祝您好运,并在构建您的新应用程序时玩得开心。
【解决方案3】:

基本策略可以包含以下内容:

  • 数据项目
    • EF 型号
    • 实体/T4 代
  • 逻辑项目
    • 应用规则
    • 与数据呈现无关的逻辑
  • 网站项目
    • 呈现/聚合逻辑(在控制器/视图中)
    • 观看次数
    • 脚本/资产
    • 模型(仅用于控制器和视图之间的通信)
  • 移动项目
    • 与网站相同,但针对移动目标

【讨论】:

    【解决方案4】:

    首先,您必须决定您希望如何实施移动版网站。 基本上你有两个选择:

    • 为您的移动页面创建单独的视图/控制器。这种解决方案是最昂贵的,但也是最灵活的。 (查看 MVC 4 中的移动支持)
    • 为您的网站创建响应式布局 (http://jquerymobile.com/) 通常我更喜欢这个选项。

    通常我使用 3 个项目

    • DAL
      • 包含 Edmx、T4 模板
    • 服务
      • 具有 CRUD 操作的服务类(我没有使用存储库,因为它们太过分了)
      • 查看模型
    • 网络
      • 控制器、视图、...

    【讨论】:

      【解决方案5】:

      我认为您选择了正确的应用程序架构,我们也在我们的一个项目中使用了相同的应用程序架构...

      MvcProject
      Model
      View
      Controller
      
      DAL project
      Holds edmx and T4 templates
      

      【讨论】:

        【解决方案6】:

        请记住,最佳架构与预算和时间表直接相关。

        MVC 将比普通的 asp.net 花费更多:

        • MVC 强制开发人员始终使用 3 层
        • MVC 开发人员更昂贵且更难获得

        当您说 DAL 项目时,我假设您的意思是常规的 asp.net。如果是这样的话:

        • ASP.NET 开发比 MVC 更快
        • ASP.NET 网站将允许您使用更复杂的第三方网格等。
        • 在美国拥有广泛的人才

        在移动开发方面,您为网站选择什么并不重要。您的移动应用程序应使用设备的本地语言(IOS、Android 等)开发。然后通过 SSL 和 JSON 与应用程序通信。

        【讨论】:

          猜你喜欢
          • 2011-02-20
          • 2012-10-18
          • 2010-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-18
          • 2020-05-26
          • 1970-01-01
          相关资源
          最近更新 更多