我试图让自己习惯于TDD,DI和基于模式的开发。到目前为止,我对应用程序开发并不陌生,但由于我计划在几个月内启动一个(大)新项目,我想做好准备并从一开始就做好;)。
当前体系结构基于基于WCF的AppServer,MS SQL数据库和访问AppServer的WPF / WCF客户端。
我有3个实体,住宿,公寓和宾客。住宿参考1公寓和1位客人。 3个实体中的每一个都有自己的存储库(因为根据我的理解,它们是根实体)。实体类是POCO,并且在服务器以及客户端中使用。存储库在内部使用OR / Mapper(目前实体框架)。
目前有3个WCF服务,每个实体处理CRUD操作一个...更多将及时跟进。
现在我的问题...... 应该在哪个层中引用实体?存储库不应该相互依赖(为了便于替换,但是由于我已经将LightCore用作DI-Container,因此应该需要它们彼此松散耦合。) 据我所知,引用可以在存储库或服务中设置。
什么是“正确”或更优雅的方式?
也许我误解了一些东西,但引用似乎并不是真正的高效。 例如,如果我有10,000个住宿,15,000名宾客和150个公寓。如果我想返回500个住宿,包括来自服务的链接访客(500似乎合理,虽然我想返回更多),那么这将达到500 * 15,000 = 750万次迭代。 这似乎不是非常高效。当然,人们可以缓存它,但缓存只对某一点有所帮助。
或者我的设计中某处存在误解?我们将不胜感激每一条建议:)
[编辑]我仍然不确定如何继续我的设计,所以任何帮助将不胜感激。
答案 0 :(得分:0)
在我看来,存储库模式的诀窍是不仅要考虑原子根实体的上下文,还要考虑聚合的并行上下文。为了说明,我说我只有两个实体,书和作者。我将为每个存储库提供一个存储库,但是要说这两个操作系统专门用于Book或Author,这将是不真实的(特别是在使用EF时)。一本书可能有多位作者,作者可能已经出版过多本书。
例如,要创建一本新书我会在书库中使用创建操作,但是为了将新书与现有作者相关联(假设存在这种情况),我的作者可能有一个方法存储库名为AddBookToAuthor(int authorId,Book book)。这将有效地检索有问题的作者,将书籍添加到作者的书籍集合中,如果这本书是新书,实际上在数据存储中创建新书籍实例。