arrays - 如何在项目之间共享记录结构,略有不同?

标签 arrays delphi delphi-xe7

我有 2 个项目处理相同的数据、不同的流程。主阵列几乎相同,但略有不同,例如:

// Project 1

TData1 = record
  A:string;
  B:integer;
  C:word;
  ...
end;

// Project 2

TData1 = record
  A:string;
  B:integer;
  C:word;
  ...
  XMLNode:TXMLNode; // Extra value needed in Project 2, not needed in Project 1
end;

我有很多数组想在项目之间共享。我想保留相同的数组结构,以便我可以复制并粘贴需要在两个项目中实现的任何 future 更改。 有什么方法可以让记录保持相同但略有不同?

我在想这样的事情:

    // in Project 1:

    TExtras = record
    end;

    // in Project 2:

    TExtras = record
      XMLNode:TXMLNode;
    end;

    // shared - in both projects

    TData1 = record
      A:string;
      B:integer;
      C:word;
      ...
      Extras:TExtras; // different extra fields based on project needs
    end;

而且我可以在 Project2 的 Extras 中添加额外的字段,使用 Data1.Extras.XMLNode 访问字段.不确定这是否是面向 future 的实现。

目标是有一天将所有共享结构放入共享单元,一个维护点,不再需要复制和粘贴。我需要数组来保持简单数组(array of TData1TArray<TData1>)的灵 active ,所以我不能进入复杂的实现,这将限制选项以轻松复制、排序、区分、操作数据...

这是正确的方法吗?有更好的想法吗?


编辑:

两个项目都处理相同的数据,因此它们都从相同的“源”文件中读取,但产生不同的最终结果。现在我有很多数组,其中 99% 在两个项目中用于相同的目的,相同的功能。 但是现在,当我在一个或另一个项目上工作时,添加新的记录字段、使用新字段的新函数,如果我不立即同步结构和新函数,那么几周后我将需要在项目 2 中做同样的事情,我将创建具有不同名称和不同函数名称的新字段。因此,当我最终在项目之间复制一些复杂函数时,我发现它们不匹配只是因为命名不同。


编辑 2:

根据所有评论和建议,我决定走另一条路:在共享单元中共享通用数据结构和代码,并在项目 2 中创建具有额外记录字段的额外数组。我将创建这些链接到主数据的新数组数组,有:

// shared data 
TData1 = record
  A:string;
  B:integer;
  C:word;
  ...
end;

Data1:TArray<TData1>;

// additional in Project 2
TDataExtra = record
  DataIdx:integer;// link to TData1
  XMLNode:TXMLNode;
  ...
end; 

DataExtras:TArray<TDataExtra>;

可以简单地访问每个 Data1 记录的 XMLNode 值:

fGetXMLNode(i); // where i is index in Data1 array and function will return XMLNode

我相信有了这个我可以保留共享单元并向任何数组添加任何额外内容,只需最少的额外工作,这仍然比维护 2 个数据结构和代码的成本更低。

那会是更好的解决方案吗?

最佳答案

如果没有完整的上下文,很难说哪种解决方案最好/更好,但这里有一些其他方法可以实现相同的效果。

条件定义

TData1 = record
  A:string;
  B:integer;
  C:word;
  [...]
{$IFDEF NEEDXMLNODEINTDATA1}
  XMLNode:TXMLNode; // different extra fields based on project needs
{$ENDIF}
end;

使用新结构

在您的第二个应用程序中使用不同的结构。对于大多数情况,我希望这是正确的方法。

TData1Node = record
  Data1 : TData1;
  XMLNode : TXMLNode;
end;

始终包含 XMLNode

因为它只是一个指针,除非您的应用程序中有大量记录,否则它几乎不会记录内存使用情况。

关于arrays - 如何在项目之间共享记录结构,略有不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34593179/

相关文章:

javascript - Flash - 将音频数据 ByteArray 传递给 javascript

Delphi:如何动态分配事件处理程序而不覆盖现有的事件处理程序?

delphi - Firemonkey组件中旋转时如何避免重复图像?

delphi - 如何使我的自定义控件在设计时完全可点击?

delphi - 帮助洞察中的新行

javascript - JS : Check string if it is failing for some rules

java - 自定义设计listview位置错误

javascript - 如何在 jQuery 中获取具有特定父类的所有元素的内容并将它们传递到 GET 变量中?

delphi - 即使 Windows 7 Flip 3D 已激活,如何使表单始终位于顶部

multithreading - 为什么使用OmniThreadLibrary Parallel.Pipeline的应用程序在关闭后仍继续在后台运行?