0

我是一名新手程序员,正在学习如何为我的模块设计 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()));
    }

}
4

2 回答 2

1

如果必须选择,我会选择第二个示例,因为它包含的代码重复较少。在第一个Document doc = getDocument(documentId);中,每个方法都有相同的语句。所以,这里的一般原则是“不要重复自己”。

此外,在第一个版本中,您可以将任何垃圾作为字符串传递给方法。虽然您也可以在第二个版本中传递 null,但检查 null 比检查无效 id 更容易。

于 2013-01-31T12:30:47.027 回答
0

取决于您的 API 的目标。

调用者是否总是有一个实例DocumentID不是一个Document实例?

  • ServiceA 是要走的路(抽象Document实例,只返回一个状态)。

调用者有时一个实例DocumentIDDocument

  • 当您为调用者提供获取文档或获取状态的能力时,ServiceB 是一种可行的方法。
  • 在这种情况下,您最好修改您的Document类以包含一个getStatus()方法。这样,如果调用者有一个Document实例,他们可以调用document.getStatus()而不是调用您的服务。
于 2013-01-31T22:07:14.680 回答