存储库模式:列出成员的策略

时间:2009-08-18 20:02:03

标签: design-patterns repository

我正在为存储库构建一组CRUD屏幕。成员对象足够大,我不想一次将大量内容加载到内存中 - 就像生成搜索结果一样。

由于搜索结果需要的是几个属性 - 例如“name”和“id” - 我可以只查询底层数据库 - 但我不想绕过存储库,因为这会否定其很多价值。

我发现的存储库模式介绍和教程不包括这种情况。他们专注于一次保存/检索/删除一个完全填充的对象。

我熟悉延迟加载对象的代理模式。但大男孩是怎么做到的呢?这个问题有一个完善的解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果你严格遵守DDD,我认为你的搜索应该返回完全填充的对象。但有时你必须改变规则。

我可以告诉你不该做什么:

  1. 不仅检索所需的数据,仍然返回实体类的未完全填充的实例。这很容易变成灾难。您最终会得到不同的查询方法,这些方法似乎会返回完全填充的实体 - 但实际上它将取决于所调用的查询方法。期待混乱。

  2. 不要滚动自己的延迟初始化方案。这很困难且容易出错。我曾经这样做了一次,我可以肯定地说这不值得付出努力。

  3. 那么,剩下的是什么?我的投票是获取您需要的数据,并创建一个只包含您计划填充的字段的类,并返回这些字段的列表。现在,任何调用您的搜索功能的人都知道他们到底得到了什么:实际数据的一个子集。当您需要完整实体时,您将不得不再次访问数据库。

    这是我在Java中的意思的一个例子:

    public class CakeRepository {
        public List<CakeProjection> getCakesByManufacturer(String manufacturer);
    
        public Cake getCake(long id);
    
        ...
    }
    
    public class CakeProjection {
        private long id;
        private String cakeName;
    
        ...
    }
    

答案 1 :(得分:0)

您可以在存储库界面上定义查询,从而撤回您之后的数据。

我认为大男孩们使用ORM层(比如Hibernate),然后将定义的查询传递给ORM。