我最近开始阅读Pro ASP.NET MVC Framework。
author讨论创建存储库,并使用接口设置快速自动化测试,听起来很棒。
但它带来的问题是必须自己声明数据库中每个表的所有字段两次:一次在实际数据库中,一次在C#代码中,而不是使用ORM自动生成C#数据访问类
我确实理解这是一个很好的做法,并使TDD看起来也很棒。但我的问题是:
是否有任何解决方法必须两次声明字段:数据库和C#代码?我不能使用自动生成C#代码的东西,但仍允许我做TDD,而不必手动创建C#中的所有业务逻辑,并为每个表创建一个存储库(也是假的)?
答案 0 :(得分:4)
我明白你的意思:你声明要通过存储库检索的大多数POCO类看起来很像你的ORM框架自动生成的类。因此,将这些数据访问类重用为业务对象是很诱人的。
但根据我的经验,我在一个业务逻辑中需要的数据很少像数据访问类一样完全。通常我需要来自数据对象的某些特定数据子集,或者通过将几个数据对象连接在一起而产生的某些数据组合。如果我愿意花两分钟时间实际构建我想到的POCO,并创建一个接口来表示我计划使用的存储库方法,我发现代码最终在我需要时更容易重构改变业务逻辑。
答案 1 :(得分:3)
如果使用Entity Framework 4,则可以从数据库自动生成POCO对象。 (http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx)
然后,您可以实现一个通用的IRepository及其通用的SqlRepository,这将允许您拥有所有对象的存储库。这在此解释:http://msdn.microsoft.com/en-us/ff714955.aspx
这是一种实现目标的简洁方法:您只需在数据库中声明一次对象,自动生成它们,并可以使用您的存储库轻松访问它们(此外,您可以进行IoC和单元测试:))< / p>
我建议您阅读本书的第二版,这是纯金,并使用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
答案 2 :(得分:2)
您没有两次声明业务逻辑。只是这个业务逻辑被抽象在一个接口后面,在这个接口的实现中你可以做你想做的任何事情:点击数据库,从文件系统读取,从web地址聚合信息,......这个接口允许更弱的耦合控制器和存储库的实现以及其他简化TDD。将其视为控制者与企业之间的合同。