Análisis de Diseño
Antipatrones de Diseño en Código Legacy
Un catálogo exhaustivo de antipatrones de diseño observados en codebases PHP legacy del sector e-commerce, con estrategias de identificación y estrangulamiento.
20 Categorías
Antipatrones organizados en dimensiones de arquitectura, seguridad, base de datos, rendimiento y socio-técnicas.
100+ Antipatrones
Documentación detallada de cada antipatrón con ejemplos ilustrativos genéricos.
Estrategia de Estrangulamiento
Cada antipatrón incluye guía sobre cómo identificarlo y eliminarlo gradualmente de sistemas legacy.
Las bases de código legacy acumulan antipatrones de diseño a lo largo de años de cambios incrementales, rotación de equipos y presión para entregar funcionalidades rápidamente.
Este proyecto documenta antipatrones observados en múltiples codebases PHP legacy del sector e-commerce. Todos los ejemplos de código son genéricos e inventados, inspirados en patrones reales de la industria. Ningún código pertenece a un sistema real.
Propósito
El objetivo es identificar, documentar y aprender cómo estrangular cada antipatrón con ejemplos ilustrativos. Este catálogo sirve como referencia para desarrolladores que trabajan con sistemas legacy.
- Reconocer antipatrones en codebases existentes
- Entender las causas raíz y consecuencias de cada antipatrón
- Aplicar estrategias de estrangulamiento para mejorar gradualmente la calidad del código
- Prevenir la introducción de nuevos antipatrones en proyectos greenfield
Categorías de Antipatrones
Los antipatrones están organizados en las siguientes categorías:
A. Estructura y Arquitectura
- God Class / Clase Dios
- God Method / Método Dios
- Inheritance Abuse / Abuso de Herencia
- Constructor Heavy / Constructor Sobrecargado
- High Cognitive Load Architecture
- Leaky Abstractions / Abstracciones Permeables
- Hardcoded Infrastructure
- Infrastructure Leakage
B. Estado y Acoplamiento
- Mutable Shared State / Estado Compartido Mutable
- Action at Distance / Acción a Distancia
- Temporal Coupling / Acoplamiento Temporal
- Implicit Workflow Coupling
- Service Locator by Object State
- Hidden Side Effects / Efectos Secundarios Ocultos
- Recursive Service Instantiation
- Environment Logic Scattered
C. Modelado de Datos (PHP)
- Primitive Obsession / Obsesión por Primitivos
- Array-Based Domain Modeling
- stdClass como Modelo Universal
- Anemic Domain Model / Modelo de Dominio Anémico
- Stringly Typed Architecture
- Boolean / Integer Flags
- Data Clumps
D. Seguridad
- SQL Injection
- Security Anti-Patterns
- SSL Verification Disabled
E. Manejo de Errores
- Silent Catch / Captura Silenciosa
- Exception Handling as Business Logic
- Fear-Driven Logging
F. Código y Mantenibilidad
- Dead Code / Fossil Code
- Mixed Language Naming
- Magic Numbers / Números Mágicos
- DRY Violations / Violaciones DRY
- Long Parameter List
G. Presentación y Comunicación
- Presentation Mixed with Domain
- Output Format Confusion
- Action-Based Routing (Numerical Actions)
- Server-Rendered HTML over AJAX
H. Database Design
- Magic Values as Type Discriminators
- Cross-Schema Queries Without Abstraction
- Duplicate Table Pairs (Operator vs Particular)
- Inconsistent Column Naming Across Schemas
- Redundant / Duplicated Columns
- JSON / Serialized Data in Columns
- N+1 Query Patterns in Loops
- SELECT * Anti-Pattern
- Missing Indexes Evidence
- UNION Without ALL
- Foreign Keys Disabled for Operations
- Soft Deletes Without Consistency
- Hardcoded Business Logic in SQL
- Polymorphic Discriminator Columns
- LIKE with Leading Wildcards
- Wide Table / Tabla Ancha
- Repeating Groups (1NF Violation)
- DOUBLE for Money
- VARCHAR for Numeric Values
- Zero Date Default
- Charset Obsoleto (latin1)
- Over-Indexing
- Missing Foreign Keys
- Trigger-Based Denormalization
- Catch-All Varchar Column
- Composite Primary Key Excesivo
- Truncated Column Comments
I. Naming
- Mixed Language Naming (Spanglish)
- Inconsistent Prefix Conventions
- Ambiguous Abbreviations
- Inconsistent Verb Conventions
- Hungarian Notation Variants
- Schema-Level Naming Inconsistency
- Table Naming: Singular vs Plural
- Cryptic Variable Names
- Action Numbers Instead of Names
- Cryptic Column Abbreviations
- Numeric Suffix Columns
- Typo in Comments
J. Integraciones y APIs
- Retry Storm / Reintentos Descontrolados
- No Idempotency in External Operations
- API Response Shape Coupling
- Vendor SDK Domain Leakage
K. Concurrencia y Consistencia
- Check-Then-Act Race Condition
- Transaction Script Without Transactions
- Distributed Transaction Illusion
L. Performance y Escalabilidad
- Cache Aside Chaos
- Premature Micro-Optimization
- Batch Processing via Memory Explosion
M. Observabilidad y Operación
- Log-and-Pray
- Monitoring Blind Spots
- Configuration by Database
N. Framework Casero Legacy
- Homemade Framework Syndrome
- Copy-Paste Inheritance Framework
O. Deployment y Entornos
- Snowflake Server
- Environment Drift
- Feature Flags by Commenting Code
P. Testing Legacy
- Integration Test as Unit Test
- Mock Everything Syndrome
- Golden Master Dependency
Q. Dominio y Negocio
- Business Rules by Convention
- Zombie Features
R. Legacy Socio-Technical Patterns
- Fear-Driven Development
- Knowledge Silos
- Bus Factor One
- Tribal Knowledge Architecture
- Ticket-Driven Architecture
- Copy-Paste Onboarding
Metodología
Cada antipatrón será abordado individualmente con una estructura consistente que incluye criterios de identificación, causas raíz, consecuencias y estrategias de estrangulamiento.
El catálogo se expandirá progresivamente con análisis detallado de cada antipatrón, incluyendo ejemplos de código genéricos que ilustran el problema y su resolución.
Próximos Pasos
Los antipatrones en este catálogo serán abordados uno a uno en iteraciones posteriores. Cada entrada incluirá:
- Definición clara y criterios de identificación
- Ejemplos de código genéricos ilustrando el antipatrón
- Análisis de causas raíz y factores contribuyentes
- Consecuencias e impacto en la base de código
- Estrategia de estrangulamiento con guía paso a paso
- Ejemplos de código refactorizado mostrando la solución