2013-05-22 149 views
2

玉傢伙,的Java添加靜態方法,類

這裏有一個問題比事實更原則。

我有一個在客戶端和服務器上使用的數據結構。

但是,在服務器端,我想要從某種數據存儲創建客戶端的功能(目前SQL,它曾經是序列化數據,但沒關係)。

本來我有一個巨大的類叫'數據存儲',它有靜態方法來檢索任何存儲的對象。

雖然不可怕,但這不完全是面向對象,並且它不是完全可擴展的。

所以我考慮將這些靜態方法本身移到數據結構中。但是,這意味着共享客戶端庫會知道如何從數據存儲中檢索對象 - 這很愚蠢。

所以我現在正在爲一個新的數據存儲包中的每個對象創建新的類,每個對象都包含從數據存儲中檢索一個對象的靜態方法。

我的問題是,我如何表示這些數據管理器類和它們檢索的對象之間的關係?

從功能上說,沒關係。靜態方法工作正常。但是我想向未來的我和其他未來的開發者表明,數據檢索器類和對象類緊密相關。

我的第一個想法是讓數據檢索器擴展數據結構。然而,這將需要聲明默認的構造函數,並暗示該類可以被實例化 - 它可以,但爲什麼?

我的第二個想法是,然後讓數據檢索器擴展數據結構,但要抽象。這將標誌着與其他開發者的緊密關係,並且明確表示只有新的方法被添加,沒有新的領域。

但是,用抽象類擴展具體類看起來很奇怪,Java仍然讓我創建了默認構造函數。

+0

考慮到這裏的問題,再次考慮這個問題,記住艾略特的報價: 「我們不會停止探索// 而我們所有探索的終點// 將會到達我們開始的地方// 並且第一次知道這個地方。」 – Alex

回答

2

我的問題是,我如何表示這些數據管理器類和它們檢索的對象之間的關係?

這是一個標準的行業問題:如何將數據從數據庫中獲取到應用程序中。常見的解決方案是使用DAO模式,它具有負責從數據庫檢索對象的數據訪問對象(DAO)。

如果您要檢索員工的個人信息,工資等,您可以有一個EmployeeDAO類,它將從相應的表中檢索它。如果您要檢索公司的利潤,地點和員工數量,則可以使用CompanyDAO類從數據庫檢索此對象。

最重要的是它可以是一個服務層,用於執行業務邏輯;還有一個DAO管理器,用於實例化DAO並返回對需要它們的類的引用。

+0

好吧,所以基本上,因爲DAO是一種常見模式,所以簡單地命名類ObjectDAO將指示所需的依賴類型,而不需要擴展其他類。是對的嗎? – Alex

+0

那麼,你想有很多DAO,而不是一箇中央DAO。關鍵不是讓一個DAO獲取所有數據,而是每個抽象一個DAO,例如,PersonDAO,EmployeeDAO,CompanyDAO等。也可以擴展DAO。 EmployeeDAO可以是PersonDAO的子類。該名稱表示(A)它是一個數據訪問對象(B)它檢索的對象類型。 – ktm5124

1

您仍然可以合併存儲庫設計模式和DAO模式的概念,將應用程序放在更簡潔的抽象層次中。存儲庫充當域級抽象。例如:

public class EmployeeBO implements EmployeeRepository { // implementation of a Business Object Domain-model 

    @Inject 
    private EmployeeDAO employeeDAO; // really implementation of data access 


    @Override 
    public boolean createEmployee(String name){ // domain-oriented method 
      // ... some validation 
      employeeDAO.save(new Employee(name)); // really data access/persistence implementation 
    } 

} 
+0

也許這裏使用的術語有些更多的解釋,並且實現了什麼? – Alex