2009-02-04 119 views
7

我正在PHP中構建一個應用程序,並且正在爲我的數據庫訪問使用數據映射器模式。我正在考慮使用觀察者模式讓我所有的映射器都觀察它們創建的實體,以便他們可以自動將任何更改保存回數據庫,而不必手動解析它們。數據映射器+觀察者模式

我只是想知道這是不是一個好主意,或者如果這是不好的做法等?

我通常使用幾個在層次結構中鏈接在一起的對象,而且現在不得不手動分析每個對象到它的映射器,這是非常乏味的,所以試圖找出一個更好的解決方案。

感謝, 傑克

+0

偉大的問題,希望你得到一些體面的答案。 – Asciant 2009-02-04 02:17:16

回答

3

肯定聽起來像是一個好主意,我。你所做的與Unit Of Work模式類似,旨在跟蹤您對映射對象所做的更改並在完成後跟蹤提交(通常爲單個事務)。

我相信像OutletRepose這樣的項目在PHP中爲您提供了這一點,同時緩解了一些映射的痛苦,但我沒有親自使用它們。

順便說一句,如果您希望沿着Domain Driven Design的路徑走下去,並從它帶來的清晰隔離中受益,聽起來好像您的對象層次結構可能受益於被視爲Aggregates

-

編輯:它看起來也像是eZ Components具有相當功能齊全的PHP ORM解決方案,並Doctrine 2.0太塑造了這種方式。

-

編輯2:我不會看看行走或克里奧爾語的問題,你都在討論。克里奧爾不是一個ORM,而更像是一個類似於PDO的數據庫抽象層 - 而且該項目現在正式成爲「死亡」。 Propel使用ActiveRecord模式,而不是DataMapper模式,所以你的域對象最終具有更多的持久性責任,而AFAIK它不包含Unit Of Work設施。

+0

嗨,感謝您的信息,我一定會考慮您提到的項目。 – 2009-02-04 09:03:05