在实现存储库模式时,查找值/表是否有自己的存储库?

时间:2009-07-22 21:40:06

标签: repository-pattern lookup-tables

我正在基于BISDM的修改版本为多个数据库实体创建RESTful服务。其中一些实体具有关联的查找表,如下所示:

Snippet of modified BISDM schema

我决定使用存储库模式在数据持久性/检索之间提供清晰的分离;但是,我不确定如何在存储库中表示查找(而不是实体)。

查找是否应该获得自己的存储库接口,与关联实体“共享”一个,还是应该有一个通用的ILookupRepository接口?

目前,这些查找是只读的;但是,有一段时间我们可能希望通过服务编辑查找。

Option 1:
   ISpaceRepository.GetSpaceCategoryById(string id);
Option 2:
   ISpaceCategoryRepository.GetById(string id);
Option 3:
   ILookupRepository.GetSpaceCategoryById(string id);

顺便提一下,这个问题与另一个问题有关look-up tables & RESTful web services

1 个答案:

答案 0 :(得分:3)

没有。存储库应该表示域模型概念,而不是实体级概念,当然也不是数据库级别。考虑您想要对域的给定组件执行的所有操作,例如Spaces。

您要做的其中一件事是GetSpaceCategories()。这绝对应该包含在Spaces存储库中,因为任何处理Spaces的人都希望访问Space类别而不必实例化其他一些存储库。

我认为通用存储库会相当适得其反。像实用程序类一样处理存储库实际上可以保证任何中等复杂的操作都必须实例化这两个存储库。