Estoy en un proyecto de TDD, así que trato de mantener lo más posible las buenas prácticas involucradas en ese tipo de desarrollo. Uno de ellos es evitar tanto como sea posible estático y global.
Estoy enfrentando este problema: Tengo un objeto "artículo" que puede tener "opciones" ("artículos adicionales") vinculados a él.
No puedo encontrar la manera de tener un buen enfoque que no sea contraproducente o que genere demasiadas consultas porque estaría en una situación en la que todo está tan desacoplado que básicamente tendré que hacer una consulta por objeto. .
Desde mi perspectiva real, veo 3 opciones:
1) Construir dentro del artículo:
class Article
{
//[...]
public function getArrOption(){
//Build an array of Options instance.
//return an array of Options.
}
}
Pro: Directo hacia adelante
Const: Capacidad de mantenimiento: el objeto del artículo ahora contiene la lógica de construcción para el objeto Opción. Esto probablemente conducirá a la duplicación de código.
2) Usando un optionFactory
class Article
{
//[...]
public function getArrOption(){
return OptionFactory::buildFromArticleId($this->getId());
}
}
Pro: La lógica de construcción no está fuera de la clase de artículo
Const: Estoy infringiendo la regla de "la estática es difícil de burlar", lo que hace que mi clase de artículo sea difícil de probar.
3) Separa todas las lógicas.
//Build the array of Option instance in a controller somewhere, using a Factory:
$arrOption = OptionFactory::buildFromArticleId($article->getId());
Pro: El artículo solo maneja su propia responsabilidad, y no le importa el enlace de su "padre" a las opciones. Las cosas están realmente desacopladas.
Const: requerirá más código dentro del controlador cada vez que necesito acceder a las opciones. Eso significa que no debería nunca usar una Factory dentro de un objeto, y ese tipo de sonido me parece utópico ...
¿Cuál es la mejor manera de ir? (¿He echado de menos algo?) gracias.
Editar:
Por no mencionar que si no puedo llamar a la fábrica dentro de la clase, básicamente nunca puedo usar el patrón de inicialización lento ...