我正在開發基於Zend Framework組件的CMS。有些該CMS數據庫表的是如下:模型粒化?
site
| id | name |
-------------
locale
| languageCode | regionCode |
-----------------------------
site_locale // link sites with locales
| siteId | languageCode | regionCode | isActive | isDefault |
-------------------------------------------------------------
我有一個名爲Site
模型,該模型包括,除其他外,下面的方法:我的是那種
getId()
getName()
listLocales() // list all locales for this site
我應該怎麼顆粒化定義模型柵欄:
一個選項將返回SiteLocale
對象/模型(即一個數據庫表表示)從listLocales()
方法,而這些SiteLocale
合作對象ntain以下方法:
getSite() // returns the Site model
getLocale() // returns a Zend_Locale
isActive() // is this locale active for the site this model represents?
isDefault() // is this the default locale for the site this model represents()
另一種選擇是簡單地建立在Site
模型下面的方法,並用它做:
getDefaultLocale() // simply return the default site locale as Zend_Locale
listActiveLocales() // simply return all active site locales as Zend_Locales
listAllLocales() // simply return all site locales as Zend_Locales
你覺得什麼是正確的方式來走?爲什麼?
此外,第一個選項(或者甚至兩個選項)是否會違反Law of Demeter?
編輯(1月22日)
雖然我喜歡Jeff's答案,我還在開新/其他觀點。
嗨,傑夫,謝謝你的迴應。關於重複,我使用了引用完整性約束(InnoDB),因此languageCode和regionCode是帶有約束的外鍵。我喜歡這種風格,因爲它可以輕鬆獲取多對多行集而無需加入語言環境表。但我確實希望能夠添加與網站分離的語言環境。希望這是有道理的。無論如何,我明白你在說什麼。我想你說服我使用這兩個選項,因爲我將利用你提到的場景(前端第一,後端管理員第二)。感謝您的輸入。 – 2010-01-22 01:26:02
再次感謝傑夫。我要吃我的蛋糕,也要吃。 :) – 2010-01-28 15:38:26