将所有字段放入其自己的类中,也称为实体或 DTO 类(例如User
, Product
, Order
等)并引用它。这些可以是 JDBC/JPA 实体。将所有业务方法放在自己的类中,也称为服务或域对象(例如UserService
, ProductService
等)并引用它。这些可以是 EJB 的。
例如。因此不
public class Bean {
private Long id;
private String field1;
private String field2;
private String field3;
// Etc... All model fields.
@PostConstruct
public void init() {
// >20 lines of business/domain code to prefill the fields from DB.
}
public void save() {
// >20 lines of business/domain code to save the fields in DB.
}
// Getters/setters for all fields and possibly also all nested fields.
}
但更是如此
public class Bean {
private Long id;
private Entity entity;
@EJB
private EntityService service;
@PostConstruct
public void init() {
entity = service.find(id);
}
public void save() {
service.save(entity);
}
// Getter/setter for id and getter for entity.
}
此外,我还看到过这样的代码,其中嵌套对象/实体由 bean 中的附加 getter/setter 委托
private Entity entity;
public String getField1() {
return entity.getField1();
}
public void setField1(String field1) {
entity.setField1(field1);
}
// Etc...
这是完全没有必要的。实体只需一个 getter 就足够了(setter 不是强制性的!),结合
<h:inputText value="#{bean.entity.field1}" />
实体本身还可以进一步划分。例如。street
, houseNumber
, zipCode
, city
, country
of an User
可以被另一个实体/DTO 取代Address
同一内User
.
如果您运气不好,代码已由可视化编辑器(例如 Netbeans + Woodstock)自动生成。无论如何,如果不完全重新设计它,就没有太多需要重构的地方,我宁愿寻找另一个项目。