2010-09-27 196 views
0

我有幾個對象,例如產品,訂單等。當我從我的數據庫中獲取信息時,我會佔用一行並創建一種對象類型。然後,我會處理創建的對象。我讀到這叫做工廠。對象工廠問題 - 使用數據庫查詢信息創建對象

這樣做有一些好處嗎?特別是像PHP這樣的鬆散類型的語言?

謝謝

編輯:這是我得到數據庫不可知論?這是一個ORM實質上做什麼?

+0

一個優勢,而不是什麼? – 2010-09-27 21:33:02

+0

只是使用SQL查詢來恢復信息並立即使用它。我知道,把所有東西都當作對象看起來不錯,但我看不出爲什麼我會這樣做。 – johnny 2010-09-27 21:35:31

回答

1

通過從數據庫查詢創建對象,您正在定義對象和關係數據庫之間的映射。這正是ORM軟件的功能。

通過這樣做,並確保你的對象不能直接訪問數據庫,而是用你的數據庫訪問函數/對象,你是保護從改變你的代碼在兩個方面:

  • 更改您的數據庫模式不會影響你的代碼。相反,代碼更改將僅位於數據庫訪問對象中。

  • 您可以通過實施與原始接口相同接口的新數據庫層來切換到不同的DBMS。您的其他對象不需要更改。

我在這個意義上猜,你獲得一些數據庫agnosticity,但你會使用數據庫庫,提供agnosticity開箱可能會更好。

在我看來,優點是你正在處理對象並獲得面嚮對象語言提供的所有優點。然後,您可以在更高級別(根據您定義的對象)讀取域邏輯,而無需篩選數據庫查詢。自己編寫ORM可能很困難,但有些工具可以幫助實現這一點。

這是我通常採用的路線,但我沒有做任何PHP開發,所以我不能說它適用於該語言的效果如何。

0

您所描述的是數據訪問層的實現 - 它聽起來不像Factory Method patternAbstract Factory pattern的示例。

是的,ORM彌補了從對象到關係數據庫的差距,並且可以充當您的數據訪問層。請記住,您使用的任何ORM都有一定的優點/缺點/侷限性。根據您的經驗和要求,編寫您自己的數據訪問層有時是一個好主意;不覺得你必須使用第三方ORM。

是的,一個好的數據訪問層可以輕鬆地在不改變業務邏輯,UI或其他代碼的情況下更換存儲機制(不同的數據庫,XML,平面文件等)。不管鬆散類型還是強類型語言,如果您使用的都是OO語言,使用數據對象(由ORM或本地數據訪問層提供)編寫代碼會容易得多。我相信可以編寫一個沒有數據訪問層的系統,其中業務層直接與數據庫一起工作。但實施和維護可能會更具挑戰性。