【问题标题】:ASP.NET MVC - Model in Web projectASP.NET MVC - Web 项目中的模型
【发布时间】:2013-02-07 09:54:58
【问题描述】:

我是 ASP.NET MVC 的新手,并继承了一个使用该技术的项目。

此类 Web 项目包含三个文件夹:ViewsControllersModel。据我了解,模型实际上包含您的域/业务逻辑,并由您的控制器调用。控制器本身充当视图和模型之间的委托者。

现在,在典型的分层架构中,任何项目中都不应该引用 Web/UI 项目。

我觉得这很令人困惑:
-> UI 包含模型,在理想世界中,模型基于“领域驱动设计”原则。
-> UI 之上的层(Services 和 DataAccess)不能有对 UI 的引用

如果他们不知道您的模型,您如何编写高效的服务和数据访问层?

我在这里缺少什么? Web.Model 是否与“DDD”不同,我还应该有一个单独的 BL 项目吗?如果是这样,那么 Web.Model 应该包含什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 model-view-controller layer


    【解决方案1】:

    我将模型视为一个概念。您可以拥有一个包含您的域(您的实体、您的服务等)的完全独立的项目,并在您的 "UI" 项目中引用它。在这种情况下,这将是您的“模型”。 这是我通常做的事情,在我的模型文件夹中,我保留 "ViewModels",用于绑定/验证(用于 UI)。 例如,如果我有一个 Employee 但我不需要使用它的所有属性(或就此而言不同的属性),我将创建一个 EmployeeViewModel 按我想要的方式调整它,我将添加验证(如果必需),然后我会将其传递给我的视图。

    这绝不是“正确的方式”/“唯一的方式”,但它过去对我有用,我想我会分享(另外,我的解释很糟糕,所以我真的希望这篇文章有意义,以防万一或需要澄清 - 请告诉我)。

    【讨论】:

      【解决方案2】:

      您不一定需要将您的模型放在同一个项目中。您当然可以将它们放在不同的层中。

      这就是我通常设置项目的方式

      1) UI 项目 - 这是一个 MVC Web 应用程序类型的项目,我将在其中拥有我的控制器及其视图和其他 UI 相关的东西

      2) 业务实体 - 这将是一个类库类型的项目,我将在其中定义我的域对象(例如:客户)。这看起来与我的数据库模式看起来很相似。这些通常只是代表我的域模式的 POCO(我将其用于 CodeFirst 数据库生成)。

      3) 数据访问 - 这将是另一个具有数据访问类的类库类型项目。通常我的存储库类/接口、我的 DBContext 类和其他数据访问类都会在这个项目中。

      4) 测试 - 项目的单元测试

      已添加业务实体项目作为对数据访问项目的引用,以便我可以在我的数据访问代码中使用这些类。

      业务实体和数据访问项目作为参考添加到 UI 项目中。我会从我的控制器/服务类中调用数据访问方法。

      您还可以根据需要在控制器和数据访问层之间添加服务/业务逻辑层。

      我的 UI 项目 ViewModels 文件夹中也有几个 ViewModel 类。我在某些屏幕上使用它,我必须显示来自多个域对象的数据。我有一个映射/服务类,它将域对象映射到视图模型对象。如果您的项目是 bifg,您可以将其作为一个单独的项目保留在同一解决方案下

      【讨论】:

        【解决方案3】:
        • 视图包含您的 HTML 布局
        • 控制器负责从模型或模型本身获取数据并将其传递给视图的繁重工作。
        • 模型用于为您的 BL 执行操作或获取数据。

        提示:您可以使用 EntityFramework(我推荐它,因为它很容易上手)来获取您的数据,而且设置起来非常简单,从而消除了您的 DAL 并节省了您自己编写所有内容的时间。

        服务:您可以拥有返回 XML/JSON(其他格式?)的控制器,方法是将您从 DB 获得的数据转换为 XML/JSON 并返回它而不是视图。 查看 MVC 4 WebApi 了解更多详细信息,请注意,您也可以使用 mvc 3 实现几乎相同的功能

        另请参阅asp.net/mvc 网站以获取入门教程,它们非常有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多