Nexus CMS
Realizado durante el año 2025
En 2024, varios colegas (docentes, realizadores audiovisuales) y yo necesitábamos portfolios web simples para mostrar nuestro trabajo. La solución estándar hubiera sido instalar y mantener 5 instancias separadas de WordPress.
Como desarrollador, vi esto como una oportunidad de arquitectura: en lugar de duplicar esfuerzos, decidí construir un motor centralizado que pudiera gestionar y servir el contenido de todos nosotros desde un solo lugar.
Introducción
Nexus CMS es el motor backend de un portafolio profesional, concebido para ofrecer una solución completa y personalizable para que desarrolladores, diseñadores y otros profesionales puedan gestionar el contenido de su sitio web de manera centralizada. La motivación principal fue crear un sistema CMS (Content Management System) a medida que no solo permitiera administrar artículos de blog o proyectos, sino que también ofreciera un control granular sobre la estructura y diseño de la página principal, algo que las soluciones genéricas no suelen proveir.
El resultado es una API RESTful que gestiona usuarios, posts, categorías, biografías, redes sociales y, lo más importante, un sistema de layouts dinámicos.
Stack Tecnológico
- Lenguaje: C# 10
- Framework: ASP.NET Core 6
- Arquitectura: N-Tier (Capas), Patrón Repositorio, Inyección de Dependencias.
- Base de Datos: Microsoft SQL Server
- Mapeo Objeto-Relacional (ORM): Dapper (implícito en los repositorios, por la naturaleza de las consultas).
- Contenedores: Docker y Docker Compose para un entorno de desarrollo y despliegue consistente.
- Autenticación: ASP.NET Core Identity (basada en cookies).
Flujo de Lógica y Arquitectura
El sistema sigue una arquitectura de N-Capas bien definida que garantiza la separación de responsabilidades, la modularidad y la facilidad de mantenimiento.
- Controladores (Controllers): Actúan como el punto de entrada de las solicitudes HTTP. Validann los datos de entrada y orquestan la respuesta. No contienen lógica de negocio; su única responsabilidad es comunicar el front-end con la lógica de la aplicación.
- Servicios (Services): Aquí reside toda la lógica de negocio. Los servicios son invocados por los controladores y coordinan el trabajo necesario para cumplir con una solicitud. Por ejemplo, el
LayoutsServicecontiene la lógica para reordenar las secciones de la página de un usuario. - Repositorios (Repositories): Esta capa abstrae el acceso a los datos. Los servicios utilizan los repositorios para consultar o modificar información en la base de datos (SQL Server) sin necesidad de conocer los detalles de la implementación del acceso a datos.
- Entidades y Modelos (Entities & Models): Las
Entitiesrepresentan los objetos de la base de datos. Se utilizanViewModelsy AutoMapper para exponer a los clientes solo los datos que necesitan, evitando así la sobreexposición de la estructura interna y facilitando la validación.
1. Gestión Dinámica de Layouts de Usuario
Más allá de un CMS tradicional, una de las características más potentes de este backend es la capacidad de permitir a los usuarios construir dinámicamente la estructura de su página principal.
- Diseño: A través de la entidad
UserHomeLayouty el servicioLayoutsService, el sistema permite a los usuarios agregar, eliminar y, lo más importante, reordenar diferentes tipos de bloques de contenido (Biografía, Redes Sociales, secciones de posts personalizados, etc.). El campoDisplayOrderes clave para esta funcionalidad, y el backend recalcula el orden de todos los elementos de forma atómica cuando uno es eliminado o movido, manteniendo la integridad de la interfaz. - Decisión Técnica: Esta implementación dota al portafolio de una flexibilidad inmensa, convirtiéndolo en un producto mucho más personalizable y potente que un simple blog. Demuestra la capacidad de diseñar e implementar lógica de negocio compleja más allá de las operaciones CRUD estándar.
2. Arquitectura Robusta con Patrón Repositorio y Servicios
El proyecto es un excelente ejemplo de una arquitectura de software limpia y escalable.
- Diseño: La estricta separación entre Controladores (orquestación de HTTP), Servicios (lógica de negocio) y Repositorios (acceso a datos) hace que el código sea fácil de entender, depurar y extender. El uso intensivo de la Inyección de Dependencias (registrado en
Program.cs) permite que los componentes estén débilmente acoplados, lo que facilita las pruebas unitarias y la sustitución de implementaciones. - Decisión Técnica: Adoptar esta arquitectura desde el principio, aunque requiere una configuración inicial más elaborada, es una decisión profesional que garantiza la mantenibilidad y escalabilidad del proyecto a largo plazo.
Live Demo
Podés probar el funcionamiento del Dashboard ingresando al entorno de pruebas:
- Usuario:
user - Clave:
pass
(Nota: El entorno se restablece periódicamente).