从业务对象中分离数据访问代码并不新鲜,但我一直在寻找实现某些功能的“最佳方式”。从业务对象中抽象出数据访问层
我有以下类:
橙色 - 这是我的业务对象。
OrangeList - 这是一个桔子列表。
用户将通过调用OrangeList.Fetch(someCriteria)从数据存储中获取Orange对象。因此,OrangeList必须具有对数据访问层的引用 - 因此它具有以下属性:IDataProvider MyDataProvider。
这对我很有用,但问题是我们无法单独获取一个橙色 - 我们总是需要通过OrangeList。
Orange或OrangeList中的一个或者两个都必须从某个可容纳DataProvider的公共对象中下降。
这是一个问题,还是我的方法在第一个地方脱颖而出?
任何提示/指针表示赞赏,谢谢。
编辑:根据下面的讨论,我检出了Repository模式。
但是,对于我的项目,我认为将Repository与DAL进一步分离是一个好主意。
因此....存储库是我如何获得橙子,并保存橙子,但仍然不知道如何。我将它委托给IDataProvider,它可以是图中列出的许多数据。
澄清 - Orange不知道如何获取/更新自己,对不对?这是一个纯粹的业务对象 - 这是重点吗?
alt text http://img22.imageshack.us/img22/2460/repositorya.jpg
如果你想知道,我的“LegacyDataProvider”是支持旧系统,它访问基于文件的数据库(FoxPro中,伊克) - 但这让我把这个包起来,并保持它从我的新代码开始。
在.NET程序集建设方面,以防止循环引用,它看起来像我要去有Repository.DLL [OrangeRepo],一个DataProviderInterface.DLL [IDataProvider]和BusinessObjects.dll [橙]。都好?
我有知道存储库的想法吗?
感谢你,虽然它看起来像我 - 我的OrangeList是存储库? – Duncan 2009-04-10 22:44:39
你的OrangeList是OrangeRepository的方法,如 rep.GetOrange(Guid id); .GetOranges()等 或者看看Rob Conery的管道和过滤器方法http://www.asp.net/learn/mvc-videos/#MVCStorefrontStarterKit – Sebastian 2009-04-11 08:06:14
好的,上面的编辑对我的问题有意义吗? – Duncan 2009-04-11 11:23:59