与Lucene的DTO至POCO
我们使用Lucene作为数据检索的搜索服务器 随之而来的是一些我没有准备好的复杂性,其中最重要的是管理对象之间的关系 我想为我们的域对象创建一个干净简单的POCO。这些POCO将包含UI所需的相关对象,但不包含其他字段(定义这些关系的ID,UI上不需要的各种其他字段) 这意味着我无法直接将Lucene的Hits集合转换为我的UI友好的POCO,并且需要一些中间类集,这些类至少包含相关对象的ID(存储在同一个索引或其他索引中)。我不太愿意将这些DTO对象称为对象,但为了简单起见,我将这样称呼它们 因此,我设想它的工作原理如下:与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对象称为对象,但为了简单起见,我将这样称呼它们
这是一个合理的问题还是我走的路正确?如果POCO中没有任何ID信息,您的设计可能会出现贫血,因为只会有一堆未连接的对象(甚至可能无法一次容纳所有内存)。此外,在我看来,缺少ID会极大地干扰缓存和记忆(这有助于避免每次需要对象时都访问数据库)。我很少有机会假设我的所有数据都能同时存储在内存中。我最终选择了自己熟悉的DTO模式。DTO拥有所有ID——它只是从Lucene检索到的记录的CLR反射 然后,我将DTO映射到服务层中的POCO,并使用这些对象呈现UI元素
感觉不光滑,但它可以工作。我不需要一次使它们都适合,只需要选择从Lucene检索的子集。此外,据我所知,Lucene的Hits集合是延迟加载的,因此,除非您对其进行枚举,否则不会对索引提出任何请求。