すべてのフィールドを、エンティティまたは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内の追加のゲッター/セッターによって委任されるコードも見ました。
private Entity entity;
public String getField1() {
return entity.getField1();
}
public void setField1(String field1) {
entity.setField1(field1);
}
// Etc...
これは完全に不要です。エンティティのゲッターは1つだけで十分です(セッターは必須ではありません!)。
<h:inputText value="#{bean.entity.field1}" />
エンティティ自体もさらに分割できます。たとえばstreet
、houseNumber
のzipCode
、、、、はcity
、同じ内の別のエンティティ/DTOに置き換えることができます。country
User
Address
User
運が悪ければ、コードはビジュアルエディタ(Netbeans + Woodstockなど)によって自動生成されています。とにかく完全に再設計せずにリファクタリングすることはあまりありません。むしろ別のプロジェクトを探したいと思います。