我一直在閱讀多個PHP框架,特別是Zend框架,但我對正確的前進方向感到困惑。DataMapper模式是否打破MVC?
Zend Framework不使用ActiveRecords,而是使用Table Data Gateway和Row Data Gateway模式,並使用DataMapper將行數據網關的內容映射到模型,因爲ActiveRecord在您的模型不與您的數據庫表有1:1映射。 Zend Quickstart指南中有一個example of this。
對我來說,他們的例子看起來非常臃腫,各地都有大量的getter和setter。我遇到過各種關於領域驅動設計的博客文章,他們認爲使用如此多的getter和setter是不好的做法,因爲它將所有內部模型數據公開給外部,所以它沒有優於公共屬性。 Here is one example。
我的問題:如果你刪除了這些getter和setters,你將如何渲染你的視圖?在某些時候,數據必須顯示在視圖上,以便您可以向用戶顯示某些內容。遵循DDD的建議似乎打破了MVC中M和V之間的分離。遵循MVC和Zend的例子似乎打破了DDD,讓我爲我的所有模型輸入了大量的getter,setters和DataMapper。除了做很多工作外,它似乎也違反了DRY。
我真的很感激一些(鏈接)好的例子或更多關於它如何融合在一起的信息。我試圖在這裏提高我的建築和設計技能。
謝謝。那篇惡毒的文章能夠很好的閱讀。我還會讀到系列的其餘部分。 – 2009-06-24 08:14:38
這是一個很好的答案,我會補充說,getters,setters有什麼不對。事實上,擁有它們是增加驗證邏輯的絕佳方式。公開物業是快速和骯髒的,可以在原型製作時使用,但不是一個很好的長期解決方案。假設你想改變一個屬性的名字。如果你這樣做,每一個訪問該屬性的代碼都需要改變。如果您使用訪問器方法的通用名稱,則不必更改客戶端代碼。另外,Doctrine是比Zend DB更豐富的解決方案。我不會推薦Doctrine1,但是請嘗試Doctrine2。 – 2010-08-20 08:26:49