0

私は自分のモジュールの API を設計する方法を学んでいる初心者のプログラマーです。他のクラスが使用する API を提供するために、2 種類のサービス クラスを考えました。

最初の例はパラメーターによってロジックを処理し、2 番目の例はオブジェクトの方法で処理します。

他のクラスが使用するビジネスメソッドを提供するためのより良いアプローチ/設計はどれですか?

一般的な経験則として、どちらを使用する必要がありますか?

例 1 - サービス A

public class ServiceA {

    private SampleDAO dao =  new SampleDAO();
    private static final String DRAFT_STATUS = "DRAFT";
    private static final String APPROVED_STATUS = "APPROVED";
    private static final String SUBMITTED_STATUS = "SUBMITTED";


    public boolean isDocumentApprove(String documentId) {
        Document doc = getDocument(documentId);

        return (APPROVED_STATUS.equals(doc.getStatus()));
    }

    public boolean isDocumentDraft(String documentId) {
        Document doc = getDocument(documentId);

        return (DRAFT_STATUS.equals(doc.getStatus()));
    }

    public boolean isDocumentSubmited(String documentId) {
        Document doc = getDocument(documentId);

        return (SUBMITTED_STATUS.equals(doc.getStatus()));
    }


    private Document getDocument(String documentId) {
        return (dao.getByDocumentId(documentId));
    }
}

例 2 - サービス B

public class ServiceB {

    private SampleDAO dao =  new SampleDAO();
    private static final String DRAFT_STATUS = "DRAFT";
    private static final String APPROVED_STATUS = "APPROVED";
    private static final String SUBMITTED_STATUS = "SUBMITTED";


    public Document getDocument(String documentId) {
        return (dao.getByDocumentId(documentId));
    }

    public boolean isDocumentApprove(Document doc) {    
        return (APPROVED_STATUS.equals(doc.getStatus()));
    }

    public boolean isDocumentDraft(Document doc) {
        return (DRAFT_STATUS.equals(doc.getStatus()));
    }

    public boolean isDocumentSubmited(Document doc) {   
        return (SUBMITTED_STATUS.equals(doc.getStatus()));
    }

}
4

2 に答える 2

1

どちらかを選択する必要がある場合は、コードの重複が少ない 2 番目の例を選択します。最初のものでは、Document doc = getDocument(documentId);すべてのメソッドに同じステートメントがあります。したがって、ここでの原則は「同じことを繰り返さない」ことです。

さらに、最初のバージョンでは、ガベージを文字列としてメソッドに渡すことができます。2 番目のバージョンでも null を渡すことができますが、無効な ID よりも null をチェックする方が簡単です。

于 2013-01-31T12:30:47.027 に答える
0

API の目的によって異なります。

呼び出し元には常にインスタンスがあり、インスタンスはDocumentIDありませんDocumentか?

  • ServiceA がその方法です (Documentインスタンスを抽象化し、ステータスのみを返します)。

呼び出し元はインスタンスを持っている場合もあれば、インスタンスDocumentIDを持っている場合もDocumentありますか?

  • ServiceB は、発信者にドキュメントを取得する機能またはステータスを取得する機能を提供するための方法です。
  • Documentこの場合、クラスを変更してメソッドを含める方がよいでしょうgetStatus()。そうすれば、呼び出し元にDocumentインスタンスがあれば、document.getStatus()サービスを呼び出す代わりに呼び出すことができます。
于 2013-01-31T22:07:14.680 に答える