簡體   English   中英

服務層的API設計

[英]API Design for Service Layer

我是一個新手程序員,正在學習如何為我的模塊設計API。 我想到了兩種類型的服務類來提供供其他類使用的API。

第一個示例通過參數處理邏輯,第二個示例通過對象方式處理。

為我提供其他班級使用的業務方法,哪種方法/設計更好?

作為一般經驗法則,我應該使用哪個?

示例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()));
    }

}

如果必須選擇,我將選擇第二個示例,因為它包含較少的代碼重復。 在第一個中,有相同的Document doc = getDocument(documentId); 每種方法中的語句。 因此,這里的一般原則是“不要重復自己”。

此外,在第一個版本中,您可以將任何垃圾作為字符串傳遞給方法。 盡管您也可以在第二個版本中傳遞null,但是檢查null而不是檢查無效的id更為容易。

取決於您的API的目標。

調用方是否總是有一個DocumentID不是一個Document實例?

  • ServiceA是一種處理方式(抽象Document實例,僅返回狀態)。

調用方有時是否具有DocumentID有時甚至具有Document實例?

  • 當您為調用方提供獲取文檔或獲取狀態的功能時,ServiceB是一種解決方法。
  • 在這種情況下,最好將Document類修改為包含getStatus()方法。 這樣,如果調用方具有Document實例,則他們可以調用document.getStatus()而不是調用您的服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM