有效的Java。可序列化生成器模式(如何添加公共无参数构造函数?)
我想使用生成器模式以Joshua Bloch的风格创建一个类。但是我想使用这个类作为DTO对象,并从EJB传输它。所以它需要有公共的无参数构造函数。如何在builder模式中实现这种javabean风格?在有效的Java对象中,只有一个构造函数接受有效的Java。可序列化生成器模式(如何添加公共无参数构造函数?),java,builder,effective-java,Java,Builder,Effective Java,我想使用生成器模式以Joshua Bloch的风格创建一个类。但是我想使用这个类作为DTO对象,并从EJB传输它。所以它需要有公共的无参数构造函数。如何在builder模式中实现这种javabean风格?在有效的Java对象中,只有一个构造函数接受Builder对象作为参数。若我添加了并没有参数的公共构造函数,那个么我就失去了构建器相对于JavaBean模式的优势 不确定是什么原因让您在这里使用builder模式,但以下是我的经验告诉您的问题 您正在使用EJB。因此,我假设您处于分布式应用程序模
Builder
对象作为参数。若我添加了并没有参数的公共构造函数,那个么我就失去了构建器相对于JavaBean模式的优势 不确定是什么原因让您在这里使用builder模式,但以下是我的经验告诉您的问题
我建议只在对象构造是一个多步骤过程(例如,用户注册)的情况下使用builder 那么,您可能希望将构建器变成bean,并使您的最终对象成为该构建器的
.build()
@fge的结果是的,您是对的。我想让构建器成为一个bean(因为我只能从EJB传输bean)。生成器应该是短期的人工制品,用于构造要传递的对象。@McDowell出于安全原因,我想使用生成器。i、 当客户端构建对象并将其传递给EJB方法时,该对象可能处于不一致状态。我想防止客户端在不一致的状态下创建对象。为什么你觉得这是设计的味道?因为构建器模式增加了传输对象的大小(添加构建器,至少在内部类中有所有类字段的副本)?@MyTitle也许我遗漏了一些东西,但注释中讨论的解决方案似乎只是将问题从bean转移到了构建器。bean(不带参数或构造函数;getter/setter)是可变的。生成器可以在无效状态下传递,我看不出比向bean(或其他验证机制)添加isValid
方法有什么好处。谢谢。你能提供更多关于变压器的解释吗?伙计!!!transformer是任何将objA转换为objB的东西,比如ObjectB=new ObjectB()b.setPropert1(obja.getSomeProperty());