我想首先说明,由于超出此问题范围的原因,无法修改数据库.
这就是说,该问题是,我有2个数据库对象(T1,T2)与几乎相同的特性和它们共享相同的UI代码和业务逻辑.含义取决于配置选项,UI显示T1数据或T2数据.管理数据的所有逻辑都是一样的.
我不想要的是让我的应用程序逻辑代码充满instanceof操作符,并基本上管理2组相同的代码.所以我的解决方案是创建一种包装类(TCombo),它将T1或T2作为构造函数.所有的getter和setter都具有类似的设计
public String getProp1() {
if(o instanceof T1) ((T1)o).getProp1();
else(o instanceof T2) ((T2)o).getProp1();
}
Run Code Online (Sandbox Code Playgroud)
并且基本上对于setter也是如此,所以当我设置一个值时,DB对象被正确设置.这样做可以让我使用一组代码,并在整个代码中管理这个TCombo类,这非常有用.问题是效率很糟糕,因为我的应用程序处理大型数据集,必须为数据集中的每个项目创建这个TCombo类会产生可怕的加载时间.
我的问题是:管理这些类的最佳方法是什么,所以我不需要维护2组逻辑代码并且还有速度?
这或多或少是设计用于处理的接口,因此您设置一个名称T与您的公共getter和setter 类似的接口,然后同时拥有T1并T2实现它.两个共同的代码可以传递对接口的引用,并调用公共方法而不必使用调用instanceof.这将允许您潜在地在各个实例的getter和setter中实现自定义代码(例如,如果您想要在set方法中进行验证或某些方法,T1而不是在T2等等)
另一种选择是拥有一个公共基类,两个数据库对象都可以扩展,这个基础对象包含它们之间的所有公共字段.然后你只需传递对基类的引用.这具有额外的好处,即不必在同一个地方实现相同的getter和setter.
在这两种情况下,你将需要使用instanceof和铸造来访问独特的方法T1和T2,但你应该能够经常要少得多做到这一点.
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |