JavaBeans的替代方案是什么?

11

我非常痛恨JavaBeans模式,就像一千个太阳般的激情在燃烧。为什么呢?

  • 过于冗长。现在是2009年了,我不应该再为属性写7行代码了。如果它们还有事件监听器,那就更加得小心谨慎。
  • 没有类型安全的引用。没有类型安全的方式来引用属性。Java的整个重点就是类型安全,而它最流行的模式却完全不具备类型安全性。

我希望的是类似这样的东西:

class Customer {
    public Property<String> name = new Property();
}

我主要是网页开发人员,因此需要JPA和Wicket支持。

帮我摆脱JavaBean的束缚!


“他们鼓励字符串引用”是什么意思? - cletus
我认为他的意思是很多Web框架和其他东西最终需要通过反射来引用它们。但我不太确定这与整个方法有什么关系,因为这似乎更像是框架的失败而不是其他什么。 - jsight
1
下了JavaBean的车?走这边,来到C#平台... - duffymo
既然你提到了Wicket,我想起了这个:http://wicketwebbeans.sourceforge.net/ 或许这能帮到你? - Esko
11个回答

0

我在我的模型实体上(使用JPA注释)经常使用JavaBean属性,以便将它们与UI(使用JFace)进行数据绑定。

不幸的是,我没有第二个问题的解决方案(也许除了定义包含属性名称的常量)。

为了生成监听器样板代码,我让我的模型实体从一个抽象的AbstractJavaBean超类扩展,该超类使用反射处理它。然后我可以使用默认的创建getter/setter的方式,只是setter需要重写,如下所示:

public void setRemarks(String remarks) {
    set("remarks", remarks);
}

AbstractJavaBean.set方法通过反射(通过Apache commons beanutils)通过getter读取属性“remarks”的旧值,将新值设置为名为“remarks”的字段,并使用旧值和新值触发属性更改事件。实际上,当基于其更改的某个属性(例如“birthDate”属性被更改时)时,“派生”属性可以自动触发属性更改,从而可以扩展此想法以使其能够启用依赖性。所有这些逻辑都可以在AbstractJavaBean中编码一处并由任何模型对象使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接