我需要生成並執行一個複雜的sql查詢,它將訪問多個數據庫來創建一些通用的report
。這意味着查詢與特定的DAO
對象無關。違反DAO模式。該怎麼辦?
那麼我應該把執行這樣一個查詢的邏輯和返回結果作爲DTO
?如果我創建了ReportDao
接口,然後實現它,它可能會導致另一個開發人員陷入困境,我認爲他們會希望Dao
對象與數據庫中的某個表綁定。
我需要生成並執行一個複雜的sql查詢,它將訪問多個數據庫來創建一些通用的report
。這意味着查詢與特定的DAO
對象無關。違反DAO模式。該怎麼辦?
那麼我應該把執行這樣一個查詢的邏輯和返回結果作爲DTO
?如果我創建了ReportDao
接口,然後實現它,它可能會導致另一個開發人員陷入困境,我認爲他們會希望Dao
對象與數據庫中的某個表綁定。
!意見警告!
DAO不一定必須鏈接到特定的域類。沒有任何領域類是孤立存在的,如果我們假設一個DAO只包含一個表/域類的操作,就會有一個驚喜,因爲操作可能涉及多個領域類,因此無論放在哪裏都會被錯誤地放置它。最好還可以將DAO看作是與某個功能區域相關的一組方法。如果大多數Dao都是圍繞域對象建模的,那麼以不同的名稱命名不同的報告可能是明智的,但只要我們討論與報告/報告相關的方法集合,ReportDao就可以。或者,也許「GeneralReportDataDao」是更好的(請記住,我只有在你的問題的信息工作,想想什麼類代表,並試圖找到一個描述性的名稱..)
另一點,我已經看到在域類之後組織DAO的經驗是,與中心域類有關的DAO往往會變得非常大,因爲中心域類通常與大量功能相關聯。這不僅適用於DAO類,還適用於服務等,使用相同的模式來組織功能。
我們主要有在Java類兩個「類型」,我們有做東西(服務,刀等,通常無狀態類,代表東西(包含數據,通常狀態類的類)和類類)。有狀態數據類應該在它們表示的內容(即數據)之後進行命名和建模,而無狀態服務類應該在功能之後進行命名和建模。雖然試圖以與數據相同的方式嘗試組織服務,但它往往會導致代碼很差,大類和功能區域遍佈幾個類。
它會在同一查詢中訪問多個數據庫嗎?或者使用多個數據庫的結果? –
@EvanKnowles是的,這將是一個'dblink'查詢。 – user3663882
項目中有很多決定可能會導致某些開發者陷入困境。與團隊中的人員一起快速進行民意調查,看看他們的感受如何。具有多個數據源的單個DAO不是純粹的邪惡,複合DAO也是合理的,因爲聚合多個DAO的服務層也是如此。 –