我是一名新手程序员,学习如何为我的模块设计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()));
}
}
答案 0 :(得分:1)
如果我必须选择,我会选择第二个例子,因为它包含较少的代码重复。在第一个中,每个方法都有相同的Document doc = getDocument(documentId);
语句。所以,这里的一般原则是“不要重复自己”。
此外,在第一个版本中,您可以将任何垃圾作为字符串传递给方法。虽然您也可以在第二个版本中传递null,但检查null是否比无效ID更容易。
答案 1 :(得分:0)
取决于您的API的目标。
来电者总是是否有DocumentID
和从不 Document
个实例?
Document
实例并仅返回状态)。来电者有时是否有DocumentID
和有时 Document
个实例?
Document
课程以包含getStatus()
方法。这样,如果来电者有Document
个实例,他们可以拨打document.getStatus()
而不是致电您的服务。