5

我正在尝试学习 Asp.net Mvc,所以我正在尝试 教程。

他们讨论了存储库模式以及如何轻松更改为另一种数据访问技术,而不仅仅是直接调用 Linq to Sql。

在控制器类中使用 LINQ to SQL 使得将来很难切换数据访问技术。例如,您可能决定从使用 Microsoft LINQ to SQL 切换到使用 Microsoft Entity Framework 作为数据访问技术。在这种情况下,您需要重写应用程序中访问数据库的每个控制器。

注意:在阅读本教程之前,我从来没有真正理解过界面是如何工作的,而且还不是 100% 清楚。我现在把它看作是一个类的某种“模板”。

在成功使用 Linq to Sql 之后,我认为尝试 Ado.net Entity Framework 会很好,因为我已经阅读了很多关于此的内容。他们说使用存储库模式可以轻松切换,所以我想我会测试一下。

我的问题是:我应该怎么做才能更改为 Ado.net EF?

这是我认为我应该做的。

  • 添加 Movie.edmx 文件并配置它(添加我的电影表)。
  • 编写一个基于 IMovieRepository 的新类,并可能将其称为 MovieEFRepository。
  • 将控制器构造函数中的参数更改为 MovieEFRepository。这是我觉得奇怪的第一件事,因为在教程中他们说如果您更改为其他数据源,不使用存储库将迫使您更改所有控制器。既然我指定了 MovieRepository 类,我不需要更改每个控制器吗?
  • 我认为我需要做的最后一个调整是更改视图。因为它使用的是由 Linq to Sql 设计器创建的 Product 类。我不确定我将如何做到这一点。我想我应该使用一些不依赖于 dbml 文件的对象?

如果我对 Asp.net Mvc 的看法有点简单,请原谅我。我是一名对 Asp.net 网络开发非常感兴趣的网页设计师。

4

2 回答 2

6

因此,经过几天的阅读和大量的谷歌搜索后,我开始使用它。首先,我试图找出 IoC(控制反转)的真正含义。

我发现的第一个网站是一个有关于 Unity 的截屏视频的网站。这是 .Net 的 DI/IoC 框架。

现在来看,这实际上是一个非常好的截屏视频和示例,说明使用 Unity 和 IoC/DI 是多么容易。当时我并没有完全理解,所以我继续谷歌搜索。

我经常遇到的一个网站是 Martin Fowler 的网站。

对我来说,这个网站的编码新手有点抽象。此外,这听起来可能很奇怪,但该网站上的字体、行高和排版真的很糟糕,这使得它更难阅读。

我阅读的下一个网站是关于温莎城堡的,因为阿尔弗雷多·费尔南德斯说它很容易使用。

文档还不错,但我在将他们的“入门”基本示例转换为我的 Asp.net Mvc 应用程序时遇到了一些问题。他们开始时也缺少第 2 部分和第 3 部分。

在此之后,我开始寻找不同的框架,看看是否能找到一个非常基本的例子。如果我只是再次查看第一个截屏视频,我会更快地修复它,但不知何故我忘记了它。

我在使用 xml 配置文件时遇到了很多问题,我似乎无法让它们工作。我尝试过 Windsor、Structure Map 和 Spring.net,但我总是被 xml 文件卡住。

所以我决定去 Asp.net Mvc 站点,因为那是我开始学习 Asp.net Mvc 的地方。我发现第一个截屏视频和 MIX09 演示文稿非常清晰,并且我理解了人们在谈论的大部分内容。在构建 Storefront 应用程序时,我被 Rob Conery 的第二次截屏卡住了。因为我现在对存储库和 IOC/DI 有了更多了解,所以我认为重新开始观看 Rob Conery 的截屏视频是个好主意。在其中一个截屏视频中,他谈到了将所有示例上传到 codeplex。

我去了codeplex,发现您可以浏览源文件而无需下载它们。我试图找出 Rob Conery 如何使用他的存储库处理 IOC/DI。所以我很高兴看到他使用的是结构映射,但他没有使用 xml 配置文件,而是使用了一个引导程序类,该类将所有接口注册到它们的具体类。

在用我的 web 应用程序尝试这个之后,我终于能够让结构图在我的应用程序中工作(万岁)。

他还向我展示了如何修复对来自 Linq 到 Sql 的 Product 类的依赖。他创建了一个额外的对象,然后在 Linq 查询中被“select new product { }”调用。

哇,这个答案比我计划的要长一点,但我希望这可以帮助像我这样在编码和 Asp.net Mvc 方面非常新手的其他人。

于 2009-08-03T19:48:00.900 回答
1

您可能因为注入而使您的存储库解耦,而不是如果您只遵循示例,因为

public MoviesController() : this(new **MovieRepository**())

我建议您阅读有关 IOC 的内容,它既简单又非常有趣,您可以像温莎城堡一样使用 ioc 容器。

这样,您的控制器将只有一个构造函数,即具有接口的构造函数,不需要更改。

对于您的实体,您可以对控制器执行相同的操作,为每个实体创建一个接口并使用 ioc 模式,您只需更改 ioc 容器的配置文件。

如果你不做这些事情,你的权利,你需要改变你所说的一切。

我希望有帮助!对不起我的英语!

于 2009-08-02T01:35:49.200 回答