从xml动态生成Java bean类有什么好处?

| 我已经使用IDE编写了许多Java Bean类。另一个人提出了另一种方法。他建议我将其中包含bean定义的xml文件放入其中。然后,我使用jaxb或xslt在构建期间动态生成类。尽管这是一种新颖而有趣的方法,但我认为它没有任何重大好处。 在这种建议的方法中,我仅看到一个好处:无需在配置控制中维护Java bean类。 Bean的任何更改都将仅需要xml文件中的更新。 动态生成Java类有什么主要好处?采取这种方法还有其他原因吗?     
已邀请:
我在项目中使用了Jibx及其生成器。我的经历好坏参半。 http://static.springsource.org/spring-ws/site/reference/html/why-contract-first.html中提到了使用JAXB(XJC)生成器的通常情况。 与XML的相互转换使得可以将其存储在DB中并检索以供将来使用,以及用于功能测试的测试用例输入。 对于大型项目,使用任何类型的生成器(Jaxb,Jibx,XMLBeans,Custom)可能都是有意义的。它允许数据类型的标准化(如BigDecimal表示财务金额,如ArrayList表示所有列表),强制接口(如Serializable或Cloneable)。这样可以实施良好做法,并减少了对生成文件进行审阅的需要。 它允许通过XSLT注入代码或对生成的Java文件进行后期处理。示例是在setter方法内,针对FinancialAmount类型的每个字段,将舍入代码注入具有特定策略(UP,DOWN,NEAR)的特定十进制大小(2,6,9)。强迫这种行为确实减少了错误的发生(对于公司应承担的不正确的财务价值)。 缺点是 通常每个Java类只能是一个bean类。进行的任何自定义将被覆盖。由于(在我的情况下)生成器与构建过程相关联。这些类在每次构建时都会生成。 您不能在Bean类上实现自定义接口,也不能为自己或第三方框架添加注释。 由于通常会生成默认构造函数,因此无法像工厂方法那样轻松实现模式。重构通常很困难,因为生成器通常不支持重构。 您可能(现在不确定,Jibx在几年前是对的)在最适用的时候无法生成ENUMS。 无论如何,您可能无法使用自己的默认数据类型覆盖。 CopyOnWrite列表,而不是ArrayList,用于跨线程共享的变量或List的自定义实现(也实现Observer模式)。 生成器的好处超过了大型项目(在人与地而不是代码,认为在三个地方有150个开发人员)分布式项目的成本。您可以通过定义包含Bean的自定义类来解决这些缺点,并使用XSD批注或另一个配置文件中的更多元数据来实现行为或后处理(添加其他代码)。请记住,由于整个项目都取决于发电机,因此发电机的支持和维护变得至关重要。小心使用它。 对于较小型的项目,我个人会自己编写类。对于大型项目,由于缺乏重构支持,我个人不会在中间层使用它。它可以用于要绑定到UI框架的简单bean。     
我同意@Akhilss。我的经验是在大型Java EE项目中进行代码生成的。 这完全取决于您的项目。如果您仅在编写几个Bean,并且仅需要基本功能,那么我认为不需要以XML开头(无论如何,这经常被过度使用)。特别是如果您实际上也不需要XML。 但是,如果要构建一个需要XML的系统(例如SOAP Web服务WSDL和模式),那么生成是个好主意,因为它使您不必手动保持模式和Bean同步。以及提供工厂类和其他支持代码。 作为反驳,使用EJB3和类似的标准,现在通常更容易编写bean并即时生成混乱的XML内容。就是让服务器完成繁重的工作。 考虑代码生成的另一个原因是,您是否需要在bean中使用更复杂的功能,因为它们代表数据结构。几年前,我试用了Apache Tuscany项目,以从XML生成SDO bean。这样做的好处是,我可以生成诸如属性更改通知之类的功能,因此当我修改Bean的任何属性(包括集合)时,可以自动通知程序的其他部分。这样生成的功能可以在您需要时节省大量时间和金钱。 最终,我建议您遵循KISS原则。因此,请勿添加不需要的内容。从XML生成的代码从长远来看对您有帮助。但是,像任何技术一样,请确保出于正确的原因添加了它。     

要回复问题请先登录注册