El patrón Abstract Factory produce familias completas de objetos relacionados garantizando su compatibilidad entre sí.
1. El Problema de Partida
El proyecto renderiza dos secciones con estructura similar pero componentes distintos: Blog (con BlogIndex, PostArticle, BlogSidebar) y Knowledge (con KnowledgeIndex, KnowledgePost, KnowledgeSidebar). Mezclar componentes de una familia con otra (ej. BlogIndex + KnowledgeSidebar) rompe el diseño porque cada familia espera props y contexto distintos. Sin una fábrica centralizada, cada página decide "a mano" qué componente importar, con riesgo de mezclar familias por error.
2. La Solución Abstract Factory
// src/lib/ContentFactory.js
import BlogIndex from '../components/blog/BlogIndex';
import PostArticle from '../components/blog/PostArticle';
import BlogSidebar from '../components/blog/BlogSidebar';
import KnowledgeIndex from '../components/knowledge/KnowledgeIndex';
import KnowledgePost from '../components/knowledge/KnowledgePost';
import KnowledgeSidebar from '../components/knowledge/KnowledgeSidebar';
const factories = {
blog: { Index: BlogIndex, Article: PostArticle, Sidebar: BlogSidebar },
knowledge: { Index: KnowledgeIndex, Article: KnowledgePost, Sidebar: KnowledgeSidebar },
};
export function getContentFactory(section) {
const factory = factories[section];
if (!factory) throw new Error(`Sección desconocida: ${section}`);
return factory; // { Index, Article, Sidebar } — siempre coherentes entre sí
}3. Uso en la página
// app/[section]/page.jsx
import { getContentFactory } from '@/lib/ContentFactory';
export default function SectionIndexPage({ params }) {
const { Index, Sidebar } = getContentFactory(params.section);
return (
<div className="layout-grid">
<Index />
<Sidebar />
</div>
);
}4. Ventajas
- Imposible mezclar familias:
getContentFactory('blog')nunca puede devolver unKnowledgeSidebarpor error de importación manual. - Añadir una tercera sección (ej.
projects) solo requiere una entrada nueva enfactories, sin tocar las páginas que ya consumen la fábrica. - Punto único de verdad: saber qué componentes pertenecen a qué sección vive en un solo archivo.