我们使用Lucene作为数据检索的搜索服务器。
随之而来的是一些我没有准备的复杂性,其中最重要的是管理对象之间的关系。
我想为我们的域对象创建一个干净简单的POCO。这些POCO将包含UI所需的相关对象,但没有其他字段(定义这些关系的ID,我在UI上根本不需要的其他各个字段)
这意味着我不能直接将Lucene的Hits集合转换为我的UI友好的POCO,并且需要一些中间的类集,这些类至少包含相关对象的ID(存储在相同或其他的indeces中)。我对这些DTO对象犹豫不决,但为了简单起见,我会称之为。
所以我设想它的工作原理如下:
我这样做的恐惧是我最终会得到贫血领域模型(http://www.martinfowler.com/bliki/AnemicDomainModel.html)。
这是一个有效的问题,还是我走在正确的道路上?
答案 0 :(得分:1)
我最终走上了熟悉的DTO模式。 DTO拥有所有ID - 它只是从Lucene检索到的记录的CLR反映。
然后我从DTO映射到服务层中的POCO,并使用这些对象来呈现UI元素。
不觉得光滑,但它有效。
答案 1 :(得分:0)
如果您的POCO中没有任何ID信息,您的设计可能会患上贫血症,因为只会出现未连接的混乱对象(这些对象可能不会同时存在于内存中)。此外,在我看来,缺少ID会极大地干扰缓存和memoization(这有助于在每次需要对象时不会访问数据库)。我很少能够假设我的所有数据都能同时存储在内存中。