目前我为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;
答案 0 :(得分:1)
DWS撰稿人。 DWS不支持猴子修补;"脚本源与Delphi源文件一样静态。从脚本的外部(在本地代码中),事物是不同的,并且可以修改代表类的对象,但是不建议这样做,因为所有的偏移都已经在编译时间,所以你可能最终导致严重的错误。
如果您正在寻找AOP,那么您想要的是在编译完成之前挂钩编译时进程并在那时插入内容。但即便如此,除非已经有代码提及你要插入的字段,否则这个新领域不会有太多好处。我不确定您要完成的是什么,除非您打算使用DWS的RTTI连接到现场经理...