【问题标题】:DTO to POCO with Lucene使用 Lucene 到 POCO 的 DTO
【发布时间】:2012-11-21 10:52:38
【问题描述】:

我们使用 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)。

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

【问题讨论】:

    标签: lucene poco dto anemic-domain-model


    【解决方案1】:

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

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

    感觉不光滑,但很有效。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不需要一次性让它们都适合,只需选择从 Lucene 检索的子集即可。此外,据我了解,Lucene 的 Hits 集合是延迟加载的,因此在您枚举它之前,不会对索引提出任何请求。
      猜你喜欢
      • 2010-11-15
      • 2012-04-10
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 2015-10-17
      • 1970-01-01
      相关资源
      最近更新 更多