0

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

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

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

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

所以我设想它的工作方式如下:

  1. 在 Lucene -> Hits 集合中执行查询
  2. 遍历 Hits -> DTO 集合
  3. DTO 集合 -> [检索相关对象的服务,组成 POCO] -> POCO
  4. 使用闪亮的简单 POCO 渲染 UI

我这样做的恐惧是我最终会得到贫血域模型(http://www.martinfowler.com/bliki/AnemicDomainModel.html)。

这是一个有效的担忧还是我走在正确的道路上?

4

2 回答 2

1

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

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

不觉得光滑,但它有效。

于 2012-12-10T15:50:45.227 回答
0

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

于 2012-12-04T23:03:05.140 回答