簡體   English   中英

工廠設計模式和DAO設計模式有什么區別

[英]What is difference between factory design pattern and DAO design pattern

比較這兩種模式 - Factory and DAO模式,我發現它們非常相似:

它們都有接口( Product/Dao ),Factory( ProductFactory/DaoFactory )和具體實現( ConcreteProduct,ConcreteDao )。

Factory創建一些具體的實現對象,客戶端通過接口使用該對象。

他們是相似還是我不明白? 或者也許Dao模式是工廠模式的具體實現?

提前致謝。

IMO他們非常不同

DAO用於在序列化(通常是sql)版本的數據和Java對象之間進行轉換

另一方面, Factory可用於促進大部分工作相似的問題的通用解決方案。 我之前創建的一個例子是SocketHandlerFactory,由通用ServerSocket使用,因此無論生成的Socket是否需要處理,您都可以在Factory中對其進行配置。

這有什么意義嗎?

數據訪問對象DAO )模式抽象出應用程序中持久性的細節。 而不是讓域邏輯直接與數據庫,文件系統,Web服務或任何其他持久性機制通信:域邏輯代替DAO層。 然后,此DAO層與底層持久性系統或服務進行通信。

的的優點DAO層是,如果你需要更改底層的持久性機制,你只需要改變DAO層,而不是所有的領域邏輯,其中地方DAO層是由使用。

請閱讀本文以便更好地理解。

Factory模式中 ,我們創建對象而不將創建邏輯暴露給客戶端,並使用通用接口引用新創建的對象。

客戶端需要一個產品,但不是直接使用new運算符創建它,而是向工廠對象請求新產品,提供有關所需對象類型的信息。

工廠實例化一個新的具體產品,然后將新創建的產品返回給客戶端(轉換為抽象產品類)。

客戶將產品用作抽象產品,而不了解其具體實施。

閱讀本文以便更好地理解。

工廠模式談論對象和DAO模式的創建談論數據管理

我假設當你提到DAO模式時,你會想到這樣的事情:

在此輸入圖像描述

資源

然而,DAO並不一定需要工廠來創建它們。 例如,在Spring上下文中, RepositoriesDAOs之間沒有區別,並且就客戶端而言,沒有存儲庫工廠。

引用Oracle的文章,該圖是從中獲取的,它們實際上是在使用GoF工廠模式(Gang of Four book中有2個; Abstract Factory和Factory Methods):

The DAO pattern can be made highly flexible by adopting the Abstract Factory [GoF] 
and the Factory Method [GoF] patterns (see "Related Patterns" in this chapter).

總之,如果不是兩種模式的結構,那么在用例中存在明顯的差異,並且DAO模式中的工廠可能指的是作為附加利益添加的“真實”工廠模式,而不是作為所述的組成部分。圖案。

主要區別在於使用這些設計模式的語義上下文。

DAO用於抽象出數據庫處理的域邏輯。

Fatory用於抽象出對象創建邏輯。

不要打擾實現/接口細節。

將您的應用程序分成多個層,如果您需要數據庫,那么,擁有DAO是一個選項,可以跨層使用。

暫無
暫無

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

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