2013-03-19 56 views
-1

我正在構建一個具有業務邏輯層的應用程序,它需要訪問所有與DB相關的東西的DAO層。我的要求是,DAOImpl類可以保持更改,所以我正在尋找可以在業務邏輯類中處理DAOImpl類的方法,而無需知道實際的DAOImpl類。有沒有什麼辦法可以在Java中實現這一點?java hide在兩層之間實現類細節

+0

我想補充的問題,在任何給定時間點,有也只是將用於一個DAOImpl類。 – user2185805 2013-03-19 09:58:30

回答

3

DAOImpl類應該實現一個接口DAOLayer(說)。您的businessLogic類應由一個DAOLayer對象組成。

class BusinessLogic 
{ 
    /// ... 

    DAOLayer daoLayer; 

    public BusinessLogic(DAOLayer daoLayer) 
    { 
     this.daoLayer = daoLayer; 
    } 

    /// ... 
} 

class DAOImpl implements DAOLayer 
{ 
    /// ... 
} 

同時創造BusinessLogic類對象你應該通過實際執行DAOLayer

類似如下:

DAOLayer aDaoLayer = new DAOImpl(); 
BusinessLogic bl = new BusinessLogic(aDaoLayer); 

OR

public BusinessLogic() 
    { 
     this.daoLayer = DAOFactory.create(true); 
    } 

class DAOFactory 
{ 
    public static DAOLayer create(bool isDB) 
    { 
     DAOLayer aDao; 

     if(isDB) 
     { 
      aDao = // create for DB 
     } 
     else 
     { 
      aDao = // create for file 
     } 

     return aDao; 
    } 
} 
+0

我明白了,但BusinessLogic構造函數如何獲取DAOImpl對象的句柄。我將不得不放入類似 - this.daoLayer =新的DAOImpl();這將特定於當前的DAOImpl實現。 – user2185805 2013-03-19 10:01:20

+0

請參閱編輯。在「BusinessLogic」中不應創建與DAO相關的對象。或者你也可以使用工廠模式。 – Azodious 2013-03-19 10:09:21

0

聽起來像你想要使用interface,它是java的實現從期望的行爲解耦的基本方法。

1

您的buisness邏輯應該定義只處理DAO interfaces,這將隱藏實際的imlementation。

爲了能夠迅速改變實現類,看看IoC容器,如Spring