0

目前我为 DWScript + SQLite 编写了一个 ORM 映射。我已经成功实现了普通属性(如字符串或整数)的映射,但现在我想添加外键多对多关系。为此,我计划在 A 类中声明外键属性,然后在运行时向 B 类添加一个关系管理器,以对关系进行建模。我知道我可以将关系管理器放在源代码的 B 类中,但想象一下,如果我的应用程序中有一些模型具有用户模型的外键,并在框架中声明。为每个新应用程序修改框架是不切实际的。

我的问题:如何在脚本运行时向对象/类添加新属性、字段或函数?

这里有一些解释代码:

type TClassB = class;

type TRelationManager = class end; // a class which controls the access to the relation, only a stub

type  
  [XORM_ForeignKey('LinkB')] //attribute to indicate property "LinkB" as Foreign Key
  TClassA = class(TBaseModel)
    private
      FLinkB : TClassB;
    published
      property LinkB : TClassB; //Foreign Key to TClassB
  end;

  TClassB = class(TBaseModel)
    private
    published
        // This field should be added at runtime and not directly in the source code, as shown here.
        RelationManager : TRelationManager; 
  end;
4

1 回答 1

1

DWS 贡献者在这里。DWS 不支持“猴子补丁”;脚本源与 Delphi 源文件一样是静态的。从脚本的外部(在本机代码领域)情况有所不同,并且可以修改表示类的对象,但不建议这样做,因为所有偏移量都已在编译时计算,因此您可以最终导致严重的错误。

但是,如果您正在寻找 AOP,您想要的是在编译完成之前挂钩到编译时过程并在该点插入内容。但即便如此,除非已经有引用您要插入的字段的代码,否则拥有这个新字段不会有太大的好处。我不确定您要完成什么,除非您打算使用 DWS 的 RTTI 连接到现场管理器...

于 2014-07-26T18:45:34.363 回答