11

我一直在阅读 Pro ASP NET MVC Framework 这本书,我对很多事情感到非常困惑。我一直在尝试做一些研究,但我发现有这么多不同的方法和概念被扔给我,这只会让事情变得更糟。
所以我有几个问题:

  1. 我知道 MVC 应该将功能分为三个主要部分:模型 -> 控制器 -> 视图。MVC 是不是与三层架构不同的方法?还是我仍然应该考虑在我的项目中创建数据访问层和业务逻辑层?

  2. 存储库到底是什么?它是什么充当我的数据访问层?存储库在哪里/如何适合 MVC?

  3. 这本书讨论了使用 LINQ to SQL 与数据库进行交互,但它指出未来将不支持 LINQ to SQL,并且微软正在将其用于实体框架。实体框架在哪里适合 MVC,我如何与之交互?

在此先感谢您的帮助!
马特

4

4 回答 4

7
  1. MVC is mostly a pattern for the presentation layer, and it focuses on the interaction between the view and the controller. The model can be considered to be the components of the application that are responsible for maintaining state, including persistence.

    In a simple application the model might just be an LINQ-To-SQL model. In a large enterprise application the model might contain a data access layer, business layer, and a domain layer. The ASP.NET MVC does not restrict you to how the M should be implemented.

  2. The Repository pattern is one way to implement the persistence part of the M. The ActiveRecord is another. Which pattern to choose depends on the complexity of the application, and your preferences.

    Take a look at Step 3 of the NerdDinner tutorial where they create a simple repository using Linq to SQL.

  3. Linq to SQL will not be dead. Microsoft will still improve the core and add customer requests where it makes sense but Entity Framework would be the primary focus. Take a look at this post for LINQ to SQL changes in .NET 4.0.

    The EF can be used is a similar way as LINQ to SQL, but it is also more flexible so it can be used in other ways. For example EF4 will more or less support persistence of your own POCO objects in a more Domain Driven Design.

于 2009-06-22T07:33:00.667 回答
6

是的,我认为 MVC 是一种不同于我认为您在这里指的“3 层架构”(您主要创建 3 个项目 DAL、BL 和 UI 的架构)的方法。MVC 背后的主要思想是其每个组件(模型、视图和控制器)之间的关注点分离。控制器是负责处理用户请求的组件,在大多数情况下,它与“模型”组件配合使用,以便将所需的视图显示为对用户请求的响应。这与传统的 3 层架构之间的区别在于,DAL 和 BL 现在被分组并命名为模型,是的,您仍然需要创建这些组件。
什么是存储库?
Martin Fowler提到存储库的定义为“使用类集合接口访问域对象在域和数据映射层之间进行调解”存储库是您的数据访问层的一部分,它们不会自行访问数据,它们在域和数据映射实体之间进行调解,并且当然,它们应该放在您的模型文件夹/项目中。

Linq to SQL 会被弃用吗?
,在同一本书中也是如此,Damien Guard(ADO.NET 团队的开发人员)在他的一篇博客文章中也提到 Linq to SQL 将包含在 .NET 4.0 中。

如何与 EF 交互?
就像使用 Linq to SQL 一样。与 Linq to SQL 一样,Entity Framework 将是您的映射实体,并且也将驻留在 Model 项目中。
希望这可以帮助!

于 2009-06-22T05:54:49.470 回答
1

我想你对这些事情有点困惑,而且困惑,所以让我们慢慢回顾。

  1. N-Tiered Architecture 和 MVC 是不同的,但又相互交织。N-Tier 通常谈论分离数据访问、业务逻辑和用户界面。但是,有些人可能会争辩说,将 BLL 与 UI 完全分开是不可能的;MVC 解决了这个问题,即有一个相应的控制器与您的 BLL 和您的视图对话,而不是让您的视图直接与您的 BLL 对话。

  2. 是的,拥有存储库是拥有 DAL 的一种方法。有很多方法可以做到这一点,你不应该将自己局限于书中讨论的内容。

  3. 本书仅使用 LINQ to SQL 以最快的方式演示 ASP.NET MVC,但这并不是唯一的方式。暂时停止考虑 LINQ to SQL;无论您使用像 NHibernate 这样的 ORM,还是使用普通的 ADO.NET + DAL Factory 或其他任何东西,都可以使用 ASP.NET MVC——您将无法使用的是那些ObjectDataSources您拖放的 ASP.NET你的用户界面。

至于 Entity Framework,Brad Abrams 写了一篇很好的指南,介绍了如何将 Entity Framework 与 ASP.NET MVC 一起使用,应该涵盖了你的最后一个问题。

高温高压

于 2009-06-22T07:57:31.413 回答
-1
  1. 是的,您仍然需要自己创建数据访问和业务逻辑层。有些人可能会争辩说控制器层业务逻辑,但我个人更喜欢将真实业务逻辑(例如定价计算)与屏幕业务逻辑(例如“确定”按钮的事件处理程序)分开。然后,您将从 Controller 类中调用它们。控制器类控制屏幕的逻辑并管理从数据/业务逻辑层到屏幕值的转换。

  2. ASP.NET MVC 框架对“模型”层没有任何限制,这意味着你可以使用任何你想要的东西,包括 NHibernate、LINQ to SQL 或实体框架。我使用 LINQ to SQL,因为它很简单。

  3. 不确定,没看过那本书。我刚刚从 codeplex 下载了 Scott Hanselman 的 Nerddinner 项目,并将其用作编写 ASP.NET MVC 网站的指南。

于 2009-06-22T04:30:31.300 回答