在Java中使用包装器作为适配器的正确设计模式是什么
假设我们有一些豆子(即POJO) 我们有BeanRapper,它是Bean上的包装器,表示Bean类的DTO。还支持从Bean到Bean的适配器在Java中使用包装器作为适配器的正确设计模式是什么,java,design-patterns,Java,Design Patterns,假设我们有一些豆子(即POJO) 我们有BeanRapper,它是Bean上的包装器,表示Bean类的DTO。还支持从Bean到Bean的适配器 public class BeanWrapper { public Bean toBean() {} public static BeanWrapper fromBean(Bean bean) {} } 问题在于方法fromBean。 这种方法的正确设计模式应该是什么?应该是静态方法吗 换句话说,什么更好: BeanWrapper
public class BeanWrapper {
public Bean toBean() {}
public static BeanWrapper fromBean(Bean bean) {}
}
问题在于方法fromBean
。
这种方法的正确设计模式应该是什么?应该是静态方法吗
换句话说,什么更好:
BeanWrapper wrapper = BeanWrapper.fromBean(bean);
或者只使用非静态方法,如下所示:
BeanWrapper wrapper = new BeanWrapper().populateBean(bean);
根据评论编辑:
或者选择一个构造函数:
BeanWrapper wrapper = new BeanWrapper(Bean bean);
哪一种方法比另一种更好、更受欢迎?为什么会是这样呢?这要看情况而定,所以是基于意见的。如果您使用的是CDI(内容依赖注入),那么最好使用第一个选项,首先注入包装器,避免使方法成为静态的。这在CDI环境中更可取,因为它更接近OO范例 我的意见是只有在绝对必要的时候才使用公共静态方法。e、 g.工厂方法 对于其他人来说,所有的选择都取决于你与团队的决定。但要保持一致 为什么我认为静态方法是邪恶的(在大多数情况下):
- 像多态性这样的OO原则被静态方法抛弃了
- 静态方法表示不知道其所属位置的方法。OO提倡“谁负责”,每个方法都应该属于某个东西
- 可测试性是一个问题。调用静态方法的每段代码都需要完整地测试该静态方法,因为编译器会将该静态方法原样“复制”到调用方法中。这导致无法维护的测试
- 它们可以被看作是一种全局方法/过程。因此,它所编写的类实际上只是为了它的名称,而不是它的状态或责任
- 代码变得更加复杂,因为很难说出它的用途、为什么要使用它以及在什么上下文中使用它。误用很容易
- 工厂方法
- 单元测试
populateBean
方法,在静态方法还是构造函数之间进行选择在很大程度上取决于品味。我同意,这个问题主要是基于观点的。例如,您还可以使用一个指定模式的框架。这里有一个例子:
BeanWrapper wrapper = new BeanWrapper(Bean bean);