4

我最近开始阅读Pro ASP.NET MVC 框架

作者谈到了创建存储库,以及使用接口设置快速自动化测试,这听起来很棒。

但它带来的问题是必须两次声明数据库中每个表的所有字段:一次在实际数据库中,一次在 C# 代码中,而不是使用 ORM 自动生成 C# 数据访问类。

我确实明白这是一个很好的做法,并且启用了看起来也很棒的 TDD。但我的问题是:

是否有任何解决方法必须两次声明字段:在数据库和 C# 代码中?我不能使用自动生成 C# 代码但仍允许我执行 TDD 而不必在 C# 中手动创建所有业务逻辑并为每个表创建一个存储库(以及一个假的)的东西吗?

4

3 回答 3

4

我理解您的意思:您声明已由存储库检索的大多数 POCO 类看起来很像由您的 ORM 框架自动生成的类。因此,将这些数据访问类当作业务对象一样重用是很有诱惑力的。

但根据我的经验,我在业务逻辑中需要的数据很少与数据访问类完全一样。通常我要么需要来自数据对象的某些特定数据子集,要么需要通过将几个数据对象连接在一起而产生的某种数据组合。如果我愿意再花两分钟实际构建我想到的 POCO,并创建一个接口来表示我计划使用的存储库方法,我发现代码最终会在我需要时更容易重构改变业务逻辑。

于 2010-11-15T16:40:07.817 回答
3

如果您使用 Entity Framework 4,您可以从数据库中自动生成 POCO 对象。(链接

然后你可以实现一个通用的 IRepository 和它的通用 SqlRepository,这将允许你有一个用于所有对象的存储库。这在这里解释:http: //msdn.microsoft.com/en-us/ff714955.aspx

这是实现您想要的一种干净的方法:您只需在数据库中声明一次对象,自动生成它们,并且可以使用您的存储库轻松访问它们(此外,您可以进行 IoC 和单元测试:))

我建议您阅读本书的第二版,它是纯金的,并更新了 MVC 2 中引入的新功能 http://www.amazon.com/ASP-NET-Framework-Second-Experts-Voice/dp/1430228865 /ref=sr_1_1?s=books&ie=UTF8&qid=1289851862&sr=1-1

您还应该阅读 MVC3 中引入的新功能,现在在 RC 中(有一个新的视图引擎非常有用)http://weblogs.asp.net/scottgu/archive/2010/11/09/announcing-the -asp-net-mvc-3-release-candidate.aspx

于 2010-11-15T20:20:00.150 回答
2

您没有两次声明业务逻辑。只是这个业务逻辑被抽象在一个接口后面,在这个接口的实现中,你可以做任何你想做的事情:访问数据库,从文件系统中读取,从 Web 地址聚合信息,......这个接口允许更弱的耦合控制器和存储库的实现以及其他简化了 TDD。将其视为控制者与企业之间的合同。

于 2010-11-15T16:28:48.593 回答