Estoy desarrollando un CMS basado principalmente en los componentes de Zend Framework. Algunas de las tablas de la base de este CMS son como sigue:Granularización de modelos?
site
| id | name |
-------------
locale
| languageCode | regionCode |
-----------------------------
site_locale // link sites with locales
| siteId | languageCode | regionCode | isActive | isDefault |
-------------------------------------------------------------
Tengo un modelo llamado Site
que consiste, entre otros, de los siguientes métodos:
getId()
getName()
listLocales() // list all locales for this site
Estoy un poco en el valla en la forma granularized debería definir modelos:
una opción sería volver SiteLocale
objetos/modelos (en otras palabras, una representación de la tabla DB) desde el método listLocales()
, donde estos objetos SiteLocale
co ntain los métodos siguientes:
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()
La otra opción sería crear simplemente los métodos siguientes en el modelo Site
, y puede hacer con ella:
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
¿Cuáles cree que es la forma correcta de ¿ir? ¿Y por qué?
Además, ¿la primera opción (o incluso ambas opciones) violaría el Law of Demeter?
EDITAR (22 de enero)
Aunque me gusta Jeff's respuesta, Im sigue abierta para nuevos/otras perspectivas.
Hola Jeff, gracias por tu respuesta.Acerca de la duplicación, estoy usando restricciones de integridad referencial (InnoDB) por lo que el código de idioma y el código de región son claves foráneas con restricciones. Me gusta este estilo ya que hace que sea fácil buscar el conjunto de filas de muchos a muchos sin tener que unirme a la tabla de configuración regional. Pero sí quiero poder agregar configuraciones regionales desacopladas de los sitios. Espero que esto tenga sentido. De todos modos, veo lo que estás diciendo. Creo que me convenciste de usar ambas opciones, ya que utilizaré los dos escenarios que mencionaste (primero en la interfaz, segundo en el administrador). Gracias por tu contribución. –
Gracias de nuevo Jeff. Voy a tener mi pastel y comerlo también. :) –