我有一个数据库,其中包含“小部件”,比方说。例如,小部件具有诸如“长度”和“宽度”等属性。用于创建wdigets的原始低级API是一团糟,所以我正在编写一个更高级别的函数集以使调用者更容易。数据库很奇怪,我不能很好地控制创建widget对象的时间。具体来说,直到处理的后期阶段,以及某些其他事情先发生之后才能创建。但是,我希望我的呼叫者认为在早期阶段已创建了一个窗口小部件对象,以便他们可以从一开始就获取/设置其属性。代理对象来模拟即将创建的数据库
所以,我实现了一个“ProxyWidget”对象,我的呼叫者可以使用它。它具有private_Length和private_Width等私有字段,可以存储所需的值。然后,它还具有公共属性“长度”和“宽度”,以便我的呼叫者可以访问。如果来电者告诉我设置Width属性的值,该逻辑是:
- 如果相应的控件对象在数据库中已存在,则设置 其Width属性
- 如果不是,存储给定宽度值在private_Width字段中供以后使用。
在稍后的阶段,当我确信窗口小部件对象已经在数据库中创建时,我复制所有值:从private_Width复制到数据库宽度字段等等(一个字段/属性不幸的是)。
这适用于一种类型的小部件。但是我有大约50种类型,每种类型都有大约20个不同的领域/属性,这导致了难以维系的混乱。我想知道是否有更聪明的方法。也许我可以使用反射来创建“代理”对象,并以通用的方式复制字段/属性数据,而不是编写大量的重复代码?以某种方式分解通用代码?我能从“数据绑定”模式学到什么吗?我是一名数学家,不是程序员,我有一种不安的感觉,我目前的方法很简单。我的代码是用C#编写的。
当您在数据库中创建窗口小部件时,您有任何通知?否则,你怎么知道你什么时候可以保存你的缓冲变化? – stakx
不是真的“通知”,但有一个功能,我可以打电话找出小部件是否存在于数据库中,并且有一个时间点我确定它存在,甚至没有问。在后面的时间点,我保存缓冲的数据。 – bubba