0

我有:

  • 原始对象:包含导入系统之前的原始数据
  • 模块 #1:验证器,它将验证原始对象
  • 模块#2:更新器将使用经过验证的原始数据(无效数据已被删除)来生成真实对象

模块 #1 必须确定数据库中是否存在ItemCode(只是一个示例,实际的键数是几十个)。模块 #2 必须通过查询数据库中的ItemCode来获取Item 对象

开发人员想要将外星属性.TempItem添加到原始对象,以便模块 #1 将Item 对象分配给.TempItem属性(因为这样做非常容易),而模块 #2 只需要使用.TempItem而无需第二次查询数据库。

我的技术专家建议这样做不好。

我想遵循编程原则和最佳实践,但不知道如何。

任何帮助表示赞赏。

4

2 回答 2

1

我认为您不需要将临时项目添加到原始对象。

您可以使用缓存,并将对象存储在字典/列表中,然后将其传递给 Module2 以用于查找。

在 Module2 中,您可以检查对象是否在缓存的字典/列表中(字典应该更容易,因为您可以根据键查找值),如果它不存在,则仅从数据库中加载它。

于 2012-07-20T05:54:36.157 回答
1

模块#1 和#2 所拥有的是一个流水线过程。#1 的输出传递到#2。#2 需要且 #1 已经确定的任何信息都可以(可以说应该)被缓存。

我将创建一个额外的对象来通过管道传递此状态信息(@astander 建议使用字典,但在许多情况下,精确存储您需要的数据的硬编码对象将易于编写且更可用/可维护)

使用“tempitem”本质上是相同的机制,但它的实现很差 - 虽然想法是相同的(不要多次从数据库中读取相同的信息)

By passing a state object through your pipeline you keep the pipeline processors loosely coupled (#2 doesn't need to know about #1, it simply acts on the state information that is passed in), which makes it easier to add new pipeline stages or refactor your modules in future. By passing the data within a separate class, it also makes it really easy to add new state data to be passed through the system.

于 2012-07-20T08:01:24.620 回答