簡體   English   中英

JAVA中的服務和DAO類

[英]Service and DAO classes in JAVA

我有3個DAO和服務類,分別針對項目客戶問題 我還有一個使用JIRA API的jiraService類。 用例是我使用API​​在JIRA中為客戶的項目創建問題。 創建問題后,我將存儲客戶信息。 客戶表中的響應信息。 從JIRA發布到問題表中,然后將問題ID,客戶ID存儲在項目表中,這樣我就知道哪個問題與哪個客戶和項目有關。 現在我有一些問題-

  1. 我應該如何從jiraService類調用DAO類? 直接像我在服務類中那樣直接調用所需的DAO類,還是應該通過為該DAO類創建的服務類來調用它?
  2. DAO類應該僅包含CRUD方法。 但是說操作可能有所不同。 例如,我可能想根據客戶名稱或問題ID或兩者來獲取項目。 我們無法為此創建通用的GET方法。 那么在DAO類中包括所有所需的CRUD操作變體是否被視為一種好習慣?
  3. 一個DAO類應如何在其他DAO類中調用方法? 例如,我有一個客戶名稱,並且正在獲取該客戶的所有項目信息。 在我的項目表中,我存儲了customerId,因此我需要首先獲取該客戶的customerID,然后使用客戶ID從項目表中獲取所有項目。 我應該如何在projectDAO類的customerDAO中調用getCustomerID方法?
  1. 為什么在DAO中有一個服務課程? 您應該從JiraService類中調用DAO類方法。
  2. 如果無法創建通用方法,則應為每種情況創建不同的方法。 我認為這與DAO類中CRUD操作的良好實踐無關
  3. 我認為最好為每個DAO調用提供服務方法。 干凈得多。 您也許可以使用單個服務類來調用這兩個DAO方法。 從其他DAO調用DAO可能會在將來導致循環依賴。

好的,首先,您不應該直接從另一個(3)調用一個DAO類,因為那樣會破壞安全性。 正確的方法是創建兩個對象,然后從第二個實例化第一個。 例如,您通過按客戶名稱搜索到的customerID,並與customerDAO對象一起存儲。 然后,使用該信息,您可以使用來自customerDAO對象的信息,在projectDAO對象上獲取該客戶的所有項目,但不直接將customerDAO調用到de projectDAO對象中,因為這將依賴projectDAO。

您希望它們盡可能獨立,因此將它們連接到另一個用作控制器的類,例如jiraService類。 這樣,代碼的外觀應如下所示:

CustomerDAO cdao= new CustomerDAO();
ProjectDAO pdao = new ProjectDAO();
//I will suppose that you used numeric ID and use a long variable to store the result
long id=cdao.getCustomerID("MyCustomerName");//This is just an example
List<Project> lp= pdao.getProjectsByCusID(id);

然后,盡管如此,您只需要從jour jiraService類(1)調用DAO對象,因為這不會影響您的代碼。

最后,正如您之前所說,DAO應該包含CRUD方法(2),這意味着您可以實現您認為將要使用的每個CRUD方法。 如果您認為需要一個getProjectsByName(String)方法,只需實現它即可,就像您自己的代碼一樣,並且是CRUD方法,在DAO類上也可以。

希望它有幫助:)

從上面可以明顯看出,這種2N層設計。 假定以下內容:服務分別命名為ProjectService,CustomerService,IssueService和JiraService; DAO類是ProjectDAO,CustomerDAO和IssueDAO。 請記住,依賴關系必須依賴於抽象而不是依賴。 關於扎實原則的不錯的文章

  1. JiraService的目的是通過使用API​​來更新JIRA。 從JiraService保存到數據訪問層可能並不明智,因為這違反了單一責任原則

    • 一種。 控制器類調用JiraService。 完成后,控制權將返回給控制器
    • b。 然后,控制器可以調用連接DAO層(最好是通過接口,例如IProjectDAO)的其他任何服務(ProjectService,CustomerService,IssueService)來持久化數據。
  2. 進行繼承的時間-父類將具有基本的CRUD操作-示例BaseDAO,所有子DAO類均可對其進行擴展。 可以將特定行為添加到子類中。 示例:CustomerDAO.getCustomerByID(),CustomerDAO.getCustomersBySurname()。

3需要定義實體之間的關系。 JPA可以用來實現這一目標。 一種替代方法是使用DAO,該DAO從相關表中檢索所有數據並將數據映射到模型/值對象-示例客戶,項目。

暫無
暫無

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

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