是否有好的临时字段可以节省模块之间昂贵的工作量

时间:2012-07-20 05:50:32

标签: c# solid-principles principles

我有:

  • 原始对象:在导入系统之前包含原始数据
  • 模块#1 :验证原始对象的验证程序
  • 模块#2 :将使用经过验证的原始数据(删除无效数据)生成Real Objects的更新程序

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

开发人员希望将外来属性 .TempItem 添加到原始对象,以便模块#1将项目对象分配给 .TempItem 属性(因为它非常容易实现),而模块#2只需要使用 .TempItem 而不需要第二次查询数据库。

我的技术专家建议它不好。

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

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我认为你不需要将temp项添加到原始对象。

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

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

答案 1 :(得分:1)

您对模块#1和#2的了解是管道流程。 #1的输出传递到#2。 <2需要#1已经确定的任何信息可以(可以说应该)被缓存。

我会创建一个额外的对象来通过管道传递这个状态信息(@astander建议使用一个字典,但在很多情况下,一个硬编码的对象可以很容易地存储你需要的数据并且更加可用/维护)

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

通过管道传递一个状态对象,你可以保持管道处理器松散耦合(#2不需要知道#1,它只是对传入的状态信息起作用),这使得它更容易添加新的管道阶段或将来重构您的模块。通过在单独的类中传递数据,它还使得添加要通过系统传递的新状态数据变得非常容易。