在我的Java應用程序中,我想實現數據庫操作的抽象層。我不想將我的應用程序綁定到任何類型的數據庫(實現可以是任意的:SQL,XML,基於文檔的,一堆醜陋的文本文件等)DAO設計和數據結構
實體之間有很多關係,大多數的時候,這種關係是一對多的關係。
更新和免責聲明:雖然示例很簡單,但它們只是整個更復雜模型的一部分,它們有可能不適合ORM/SQL模型(這是因爲大量數據:〜幾個當規範化爲關係時,以及由於數據的性質不同,有10億條記錄)。我在這裏詢問實施簡單的關係,但這並不意味着它們構成了唯一的應用問題。
簡化示例以下:
public class Vehicle {
String mark;
String model;
String registrationId;
}
public class Depot {
String name;
String address;
}
每個實體有它自己的DAO接口:
public interface VehicleDAO {
List<Vehicle> getVehicles();
Vehicle getVehicleByRegistrationId(String registrationId);
}
public interface DepotDAO {
List<Depot> getDepots();
Depot getDepotByName(String name);
}
這些的DAO簡化爲好,只是顯示一些方法,這些方法分離對於特定實體(通過其註冊ID獲得車輛,我不需要知道關於其他實體的任何內容)。
現在有趣的部分來了。 車廠與車輛的關係是一對多。所以我必須在我的實體類和DAO方法中實現這種關係。
現在我有此兩種方法:
- 地方
List<Vehicle>
物業內Depot
類和填充它,每當我取Depot
實例(可能有懶取的改進)。這種方式DAO接口沒有改變。 - 引入
Depot
和Vehicle
的特殊標識符,以便實體類獲得附加整數屬性int id;
,並且我們向DAOList<Vehicle> getVehiclesForDepot(int depotId)
添加方法。這種方法可以通過爲標識符而不是普通整數引入特殊類來加強。
也許還有其他的方法嗎?建模實體之間關係並設計DAO接口以保持數據庫抽象易於使用且不受任何類型數據庫限制的最佳方式是什麼?我不一定會詢問完整和準確的解決方案,而是解決上述問題時的一些原則。
這被稱爲重新發明輪子 - 使用如Hibernate的ORM。 – 2011-12-22 08:48:44
@PetarMinchev使用ORM違反的不被綁定到任何類型的數據庫 – 2011-12-22 08:50:48
的然後使用ORM僅用於數據庫部分的要求之一。另外,我還沒有看到真正的項目中的數據存儲從數據庫變爲「xml」。 – 2011-12-22 08:54:25