【问题标题】:What about the Model in Large ASP.NET MVC Project大型 ASP.NET MVC 项目中的模型怎么样
【发布时间】:2012-05-23 00:44:24
【问题描述】:

我一直在研究如何将 ASP.NET MVC 和 Entity Framework 一起用于一个相当大的项目。 大多数示例通过将 .edmx 文件从 MVC 项目中移到新的 DAL 项目中来将其分离。在这个项目中,您还可以找到存储库和接口。

虽然这种方法对我来说非常有意义,但我似乎无法弄清楚一件事:MVC 中的模型怎么样?在大多数示例中,控制器直接从 DAL 项目中处理存储库接口,因此不再使用 MVC 模型?还是继续使用它们是个好主意,但将它们映射到 Controller 中?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework architecture


    【解决方案1】:

    有两种类型的模型:

    • 领域模型
    • 查看模型

    领域模型代表您的领域实体。它们可能是您的数据库中自动生成的 EF 类,也可能来自其他地方,例如您正在使用的 WCF 服务生成的代理。这些应该存在于您的域层中。

    另一方面,查看模型位于 ASP.NET MVC 项目的 Models 文件夹中。这些是您为每个视图定义的特定类。控制器操作将查询您的 DAL 层以获取一个或多个域模型并实例化您为要从此控制器呈现的给定视图专门定义的视图模型。所以一个视图模型可以保存来自多个域模型的信息(只是因为在给定的视图中你需要所有这些信息)。然后控制器将视图模型传递给视图进行显示。

    【讨论】:

    • 所以我必须在两者之间进行某种映射?在控制器中?
    • 是的,我个人使用AutoMapper 来做这个映射。您可以将映射定义分隔在称为配置文件的单独文件中,以避免控制器与映射逻辑混淆。它使它们变瘦。在控制器中,您只需使用 AutoMapper 提供的Mapper.Map<TSource, TDest> 方法。
    • 感谢您非常明确的回答!还有一个问题:任何业务逻辑的最佳位置是什么?
    • 取决于您希望此逻辑有多复杂和可重用:如果您希望它可重用,您可以在与 ASP.NET MVC 应用程序不同的类库中定义它。否则,您可以将其保存在 MVC 应用程序中,但请确保将其放在单独的文件夹中。
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多