[英]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
實例?
Document
實例,僅返回狀態)。 調用方有時是否具有DocumentID
, 有時甚至具有Document
實例?
Document
類修改為包含getStatus()
方法。 這樣,如果調用方具有Document
實例,則他們可以調用document.getStatus()
而不是調用您的服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.