【发布时间】:2013-01-15 12:55:39
【问题描述】:
我是一名新手程序员,正在学习如何为我的模块设计 API。我想到了 2 种服务类来提供 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.isApproved()? -
调用者将检索文档并将其传递给适当的方法以检查文档的状态等。
-
我明白这一点。但它不必要地复杂。如果您有一个文档,请直接通过调用文档上的方法而不是调用服务上的其他方法来获取其状态。
-
所有其他类重复相同的检查不是很重复吗?
-
为什么总是调用
doc.isApproved()而不是service.isApproved(doc)会太重复?
标签: java api oop design-patterns