Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在模块之间使用临时字段来节省昂贵的工作是好还是不好_C#_Solid Principles_Principles - Fatal编程技术网

C# 在模块之间使用临时字段来节省昂贵的工作是好还是不好

C# 在模块之间使用临时字段来节省昂贵的工作是好还是不好,c#,solid-principles,principles,C#,Solid Principles,Principles,我有: 原始对象:在导入到系统之前包含原始数据 模块#1:验证原始对象的验证器 模块#2:更新程序,将使用已验证的原始数据(已删除无效数据)生成真实对象 模块#1必须确定数据库中是否存在ItemCode(仅举一个例子,实际的键数是几十个)。模块#2必须通过查询数据库中的项目代码来获取项目对象 开发人员希望将一个外来属性.TempItem添加到原始对象,以便模块1将项目对象分配给.TempItem属性(因为这样做非常容易)模块2只需使用.TempItem,无需再次查询数据库 我的技术专家建议说

我有:

  • 原始对象:在导入到系统之前包含原始数据
  • 模块#1:验证原始对象的验证器
  • 模块#2:更新程序,将使用已验证的原始数据(已删除无效数据)生成真实对象
模块#1必须确定数据库中是否存在ItemCode(仅举一个例子,实际的键数是几十个)。模块#2必须通过查询数据库中的项目代码来获取项目对象

开发人员希望将一个外来属性.TempItem添加到原始对象,以便模块1将项目对象分配给.TempItem属性(因为这样做非常容易)模块2只需使用.TempItem,无需再次查询数据库

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

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


非常感谢您的帮助。

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

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

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

模块1和模块2的功能是一个管道过程。#1的输出传递到#2。#2需要的任何信息#1已经确定可以(可以说应该)缓存

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

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

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