簡體   English   中英

對於每種數據庫查詢,我都應該有新的實體嗎?

[英]Should I have new entity for each kind of database query?

是否有最佳方法來避免大量的DTO和實體?

現在,我的應用程序對每個數據庫表都有一些實體和DTO。 但是,由於來自用戶界面的查詢變化很大,因此我為每個查詢創建了新的實體和DTO,這導致DTO-Entity陷入困境。

舉個例子:

盡管我們的應用程序非常簡單,並且只有兩個數據庫表:

  • 具有ID,名稱,年齡,車輛ID的人員表;
  • 車輛表,ID,品牌名稱,速度,價格;

起點是我們只有以下幾類:

  • PersonEntity,PersonDto,VehicleEntity,VehicleDto

用戶可以通過id和名稱獲取Persons,Vehicles。 到目前為止很簡單。

但是我們有了一個新的要求:

用戶想通過人名查詢平均車輛價格。 (即所有Franks擁有的車輛的平均零售價為25.213 $)因此,在ui方面,我們需要一個對象: PersonGrouppedAvgPrice,其中包含personName和averagePrice字段

我發現以下解決方案:

  1. 因此,要么我們從數據庫中獲取所有具有給定名稱的Person和相應的汽車,然后將其返回到UI(並且計算將在ui端進行),這將導致不必要的網絡流量和內存消耗,但是至少我們沒有被迫創建新實體。

  2. 我們仍然從數據庫中獲取上述所有內容,並在DTO級別的服務器端進行計算。 在這種情況下,我們仍然沒有被迫創建新的實體,但是我們必須創建新的DTO。 網絡流量降低,但內存仍然很高。

  3. 我們使用以下查詢在DAO級別上做出相應的邏輯:
    從person_table中選擇p.name,avg(v.price)作為p內部聯接...等。在這種情況下,我們只獲取最有效的必要信息,但在這種情況下,我們需要新的DTO和實體。

我已經用了第三個。 但是由於各種UI查詢,新類的數量升級到了將來無法維護的水平。 對於20個數據庫表,我不得不創建〜4-4 Entity和DTO,這是〜160類。

有什么更好的方法嗎?

第3點是RDMBS的正確方法。 您應該使用查詢在數據庫中執行此工作,因為將所有表數據從數據庫服務器傳輸到應用程序服務器效率不高。

對於每個需要特殊投影的自定義查詢,您可能最終會得到其他DTO類。 這不一定是錯誤的,它將有助於編寫單元測試。 減少DTO類數量的方法很少,例如,通過使用本文所述的元組。

暫無
暫無

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

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