为了节省模块之间的昂贵工作,设置临时字段是好是坏



我有:

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

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

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

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

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

感谢您的帮助。

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

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

使用"tempitem"本质上是相同的机制,但它的实现很差——尽管想法是一样的(不要多次从数据库中读取相同的信息)

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

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

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

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

最新更新