Ich entwickle ein CMS, das weitgehend auf Zend Framework-Komponenten basiert. Einige der Datenbanktabellen für dieses CMS sind wie folgt:Granularisierung von Modellen?
site
| id | name |
-------------
locale
| languageCode | regionCode |
-----------------------------
site_locale // link sites with locales
| siteId | languageCode | regionCode | isActive | isDefault |
-------------------------------------------------------------
Ich habe ein Modell namens Site
, die unter anderem von den folgenden Verfahren besteht:
getId()
getName()
listLocales() // list all locales for this site
Ich bin ein bisschen auf die Zaun, wie granularized I Modelle definieren soll:
SiteLocale
Objekte/Modelle (mit anderen Worten einer DB-Tabelle Darstellung) aus dem
listLocales()
Verfahren, in denen diese
SiteLocale
Objekte
eine Option co wäre zurückzukehren Ntain der folgenden Methoden:
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()
Die andere Option einfach sein würde, um die folgenden Methoden in dem Site
Modell zu erstellen und mit ihm getan werden:
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
Was fühlen Sie tun, ist der richtige Weg gehen? Und warum?
Würde darüber hinaus die erste Option (oder vielleicht sogar beide Optionen) die Law of Demeter verletzen?
EDIT (22. Januar)
Obwohl Ich mag Jeff's Antwort, Im immer noch offen für neue/andere Perspektiven.
Hallo Jeff, danke für deine Antwort.Über die Duplizierung verwende ich referenzielle Integritätsbedingungen (InnoDB), so dass der languageCode und der regionCode Fremdschlüssel mit Einschränkungen sind. Ich mag diesen Stil, da es das Abrufen des Viele-zu-Viele-Rowsets erleichtert, ohne dass Sie der Locale-Tabelle beitreten müssen. Aber ich möchte in der Lage sein, von Sites abgekoppelte Locales hinzuzufügen. Hoffe, das macht Sinn. Wie auch immer, ich sehe was du sagst. Ich denke, Sie haben mich davon überzeugt, beide Möglichkeiten zu nutzen, da ich beide Szenarios verwenden werde (zuerst im Frontend, dann im Admin-Backend). Danke für deinen Beitrag. –
Danke nochmal Jeff. Ich werde meinen Kuchen essen und es auch essen. :) –