与Lucene的DTO至POCO

与Lucene的DTO至POCO,lucene,poco,dto,anemic-domain-model,Lucene,Poco,Dto,Anemic Domain Model,我们使用Lucene作为数据检索的搜索服务器 随之而来的是一些我没有准备好的复杂性,其中最重要的是管理对象之间的关系 我想为我们的域对象创建一个干净简单的POCO。这些POCO将包含UI所需的相关对象,但不包含其他字段(定义这些关系的ID,UI上不需要的各种其他字段) 这意味着我无法直接将Lucene的Hits集合转换为我的UI友好的POCO,并且需要一些中间类集,这些类至少包含相关对象的ID(存储在同一个索引或其他索引中)。我不太愿意将这些DTO对象称为对象,但为了简单起见,我将这样称呼它们

我们使用Lucene作为数据检索的搜索服务器

随之而来的是一些我没有准备好的复杂性,其中最重要的是管理对象之间的关系

我想为我们的域对象创建一个干净简单的POCO。这些POCO将包含UI所需的相关对象,但不包含其他字段(定义这些关系的ID,UI上不需要的各种其他字段)

这意味着我无法直接将Lucene的Hits集合转换为我的UI友好的POCO,并且需要一些中间类集,这些类至少包含相关对象的ID(存储在同一个索引或其他索引中)。我不太愿意将这些DTO对象称为对象,但为了简单起见,我将这样称呼它们

因此,我设想它的工作原理如下:

  • 在Lucene->Hits集合中执行查询
  • 迭代点击->DTO集合
  • DTO集合->[检索相关对象的服务,组成POCO]-> 波科斯
  • 使用闪亮的简单POCO呈现UI
  • 我担心这样做会导致贫血领域模型()


    这是一个合理的问题还是我走的路正确?

    如果POCO中没有任何ID信息,您的设计可能会出现贫血,因为只会有一堆未连接的对象(甚至可能无法一次容纳所有内存)。此外,在我看来,缺少ID会极大地干扰缓存和记忆(这有助于避免每次需要对象时都访问数据库)。我很少有机会假设我的所有数据都能同时存储在内存中。

    我最终选择了自己熟悉的DTO模式。DTO拥有所有ID——它只是从Lucene检索到的记录的CLR反射

    然后,我将DTO映射到服务层中的POCO,并使用这些对象呈现UI元素


    感觉不光滑,但它可以工作。

    我不需要一次使它们都适合,只需要选择从Lucene检索的子集。此外,据我所知,Lucene的Hits集合是延迟加载的,因此,除非您对其进行枚举,否则不会对索引提出任何请求。