DTO与Lucene的POCO

时间:2012-12-03 21:46:31

标签: lucene poco dto anemic-domain-model

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

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

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

这意味着我不能直接将Lucene的Hits集合转换为我的UI友好的POCO,并且需要一些中间的类集,这些类至少包含相关对象的ID(存储在相同或其他的indeces中)。我对这些DTO对象犹豫不决,但为了简单起见,我会称之为。

所以我设想它的工作原理如下:

  1. 在Lucene中执行查询 - >点击集合
  2. 通过点击迭代 - > DTO集合
  3. DTO集合 - > [检索相关对象的服务,撰写POCO] - > 波苏斯
  4. 使用闪亮的简单POCO渲染UI
  5. 我这样做的恐惧是我最终会得到贫血领域模型(http://www.martinfowler.com/bliki/AnemicDomainModel.html)。

    这是一个有效的问题,还是我走在正确的道路上?

2 个答案:

答案 0 :(得分:1)

我最终走上了熟悉的DTO模式。 DTO拥有所有ID - 它只是从Lucene检索到的记录的CLR反映。

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

不觉得光滑,但它有效。

答案 1 :(得分:0)

如果您的POCO中没有任何ID信息,您的设计可能会患上贫血症,因为只会出现未连接的混乱对象(这些对象可能不会同时存在于内存中)。此外,在我看来,缺少ID会极大地干扰缓存和memoization(这有助于在每次需要对象时不会访问数据库)。我很少能够假设我的所有数据都能同时存储在内存中。