我正在構建一個具有業務邏輯層的應用程序,它需要訪問所有與DB相關的東西的DAO層。我的要求是,DAOImpl類可以保持更改,所以我正在尋找可以在業務邏輯類中處理DAOImpl類的方法,而無需知道實際的DAOImpl類。有沒有什麼辦法可以在Java中實現這一點?java hide在兩層之間實現類細節
回答
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;
}
}
我明白了,但BusinessLogic構造函數如何獲取DAOImpl對象的句柄。我將不得不放入類似 - this.daoLayer =新的DAOImpl();這將特定於當前的DAOImpl實現。 – user2185805 2013-03-19 10:01:20
請參閱編輯。在「BusinessLogic」中不應創建與DAO相關的對象。或者你也可以使用工廠模式。 – Azodious 2013-03-19 10:09:21
聽起來像你想要使用interface,它是java的實現從期望的行爲解耦的基本方法。
您的buisness邏輯應該定義只處理DAO interfaces,這將隱藏實際的imlementation。
爲了能夠迅速改變實現類,看看IoC容器,如Spring
- 1. 實現細節
- 2. Object_detection實現細節
- 3. Collectors.toSet實現細節
- 4. Groovy實現細節
- 5. C++頭文件 - 接口和實現細節之間的分離
- 6. 隱藏父類的實現細節
- 7. IVR技術實現細節
- 8. akka patterns.ask實現細節
- 9. ImmutableCollections SetN實現細節
- 10. 需要PEP302實現細節
- 11. 細節和實現的
- 12. deque的實現細節
- 13. git rebase實現細節
- 14. LongAdder Striped64 wasUncontended實現細節
- 15. 在Java庫的兩個不同實現之間輕鬆切換?
- 16. 在Silverlight中實現主/細節?
- 17. 在Java中實現觀察者模式時避免暴露實現細節?
- 18. 如何拆分兩個類之間的接口的實現
- 19. 如何實現Master細節類在javascript中查找函數?
- 20. 我在哪裏可以找到.Net類的實現細節?
- 21. 代理模式具體類隱藏實現細節
- 22. 收縮層次Java實現
- 23. 無法獲得兩個位置之間的路線細節
- 24. 發現相同類型的兩個實體之間的差異
- 25. 如何正確解耦實現細節到類庫中.net
- 26. 在兩個現有視圖圖層之間插入模糊圖層
- 27. 兩類之間的遞歸java泛型
- 28. 在層之間傳遞實體對象?
- 29. Java:將「實現」分解爲兩個類+
- 30. 實現細節的定義是什麼?
我想補充的問題,在任何給定時間點,有也只是將用於一個DAOImpl類。 – user2185805 2013-03-19 09:58:30