【发布时间】:2019-09-28 15:07:25
【问题描述】:
我检测到我在命名 bean 中系统地重复代码,所以我正在寻找一种方法来重新组织代码。
例如,我有三个命名的 bean,它们重复有关 Collars 的代码:
@Named(value = "dogController")
@ViewScoped
public class DogController implements Serializable {
private Dog dog; // Class Dog has a List<Collar>
private Collar collar = new Collar(); // to be used in an XHTML form
....
public addCollar(){
//adds collar in dog
}
public removeCollar(){
//removes collar from dog
}
}
所以 bean CatController 和 BirdController 也有相同的代码。 Photo 也是如此,它们都重复代码。所以我认为我落后于一个模式。
我的直接步骤是为Dog、Cat 和Bird 创建一个interface HasCollar。然后我把重复的代码移到一个新的bean中:
@Named(value = "collarController")
@ViewScoped
public class CollarController implements Serializable {
private HasCollar animal;
private Collar collar = new Collar(); // to be used from the XHTML
....
public addCollar(){
//adds collar in animal
}
public removeCollar(){
//removes collar from animal
}
}
到目前为止一切顺利。我现在的问题是:
- 如何初始化
animal?特别是因为同一个 XHTML 可能同时使用Dog和Cat。之前没问题,因为每种类型都有一个Collar对象。如果我必须注射它,我不知道如何注射。 (问题似乎与this 相似,但略有不同)。 - 通常我会从
CollarController扩展命名 bean 并重用所有功能,但这是不可能的,因为命名 bean 已经从另一个类继承。
那么,我该如何重构这种情况以尽可能减少重复代码?
(如果需要更多信息,请告诉我)
【问题讨论】:
-
"我如何初始化动物" _你将如何在纯 java 中做到这一点? _“通常我会从 CollarController 扩展命名的 bean” 不要...你会在普通 java 中做同样的事情吗?