2011-08-10 55 views
1

我正在努力如何理解模型的正確用法。目前,我直接使用Db_Table的繼承並聲明所有業務邏輯。我知道這不是正確的方法。ZF模型正確使用

一個解決方案是使用Doctrine ORM,但這需要學習曲線,而我所用的所有當前組件都需要重寫paginator和auth。另外Doctrine1增加了另外十幾個需要加載的類。

因此,我所看到的目前最乾淨的實現是在所謂的模型和DbTabel之間使用Data Mapper類。我還沒有實現這一點,因爲它似乎正在寫另一個ORM。但是,例如可能會是這樣:SQL表用戶

  • 創建setter方法,getter方法,這裏的業務邏輯/model/User.php
  • 數據映射/model/mapper/UserMapper.php類,功能基本上是寫所有的更新,保存在這裏的行動。
  • 數據源/model/DbTable/User.php擴展Db_Table_Abstract

的問題是與其他模型之間的關係。

回答

1

我發現不是有我的模型擴展Db_Table,而是使用組合來代替。這意味着我的模型'具有'Db_Table而不是'Db_Table'。

這樣我發現在同一個模型中引用多個表更容易,這是一個常見的要求。這對於一個簡單的項目已經足夠了。我目前正在開發一個更復雜的應用程序,並使用了Data Mapper模式,並發現它已經比我想象的更簡化了我的代碼。

具體來說,我創建了一個類,它提供了對數據庫的所有訪問並公開諸如getUser()等方法。這樣,如果數據庫發生更改,或者我的客戶想要某些東西像存儲XML中的記錄或我們拆分服務器或者我只需要重寫一個類。

同樣,我的模型沒有擴展這個類,但有一個實例在構造過程中被指定爲一個屬性。

0

我想說'正確'的方式取決於情況。遵循YAGNI和KISS的原則,除非您真的相信這會對您長遠有利,否則過度複雜化您的模型設置並不好。

你正在開發什麼應用程序?你現在的設置如何延伸Db_Table讓你回來?

+0

你是對的,我開發的應用程序類似於博客或cms。帖子包含評論,用戶,標籤。最主要的是我想盡可能地將組件模塊化(用戶,新聞,博客,投票),同時我也必須在項目中採用TDD,這就是爲什麼我需要使模塊有點鬆散耦合。 –