5

私は主に JSF ベースのプロジェクトでレガシー コードを扱っており、バッキング Bean には非常に長いクラスとメソッドがたくさんあります。

これは常に私を悩ませていますが、何ができるかを探すとき、ほとんどの場合、長いメソッドを n 個の小さなメソッドに分割することしか思いつきません。これにより、クラスが非常に長くなり、読みにくい場合もあります。

では、バッキング Bean を短く簡潔にするにはどうすればよいでしょうか。それとも、1 ページに 1 つの大きなバッキング Bean を保持しますか? ベストプラクティスはありますか?

これはjsfに直接関係しているのではなく、コントローラーでビューを「バックアップ」しているモデルに関係していると思います。したがって、一般的なアドバイスも役立ちます。

4

3 に答える 3

7

すべてのフィールドを、エンティティまたはDTOクラス(たとえば、、など)とも呼ばれる独自のクラスに配置し、User代わりProductOrder参照します。それらは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}" />

エンティティ自体もさらに分割できます。たとえばstreethouseNumberzipCode、、、、はcity、同じ内の別のエンティティ/DTOに置き換えることができます。countryUserAddressUser


運が悪ければ、コードはビジュアルエディタ(Netbeans + Woodstockなど)によって自動生成されています。とにかく完全に再設計せずにリファクタリングすることはあまりありません。むしろ別のプロジェクトを探したいと思います。

于 2011-06-20T14:30:59.393 に答える
3

IMHO、各メソッドは 1 ステップである必要があります。その 1 ステップが複数の内部ステップを含む場合は、それらをより小さなメソッドに分割して読みやすくする必要があります。最新の IDE の良い点は、ほとんど労力をかけずにコードを屈折させることです。

于 2011-06-20T14:18:51.063 に答える
1

バッキング Bean だけでなく、一般的なすべてのオブジェクトに適用できます。

長いメソッドは、複数の小さなメソッドに抽出してリファクタリングする必要があります。

于 2011-06-20T14:17:03.857 に答える