class ReservationService {

  public function calculateTotal()
  {
      return $this->pricingService
          ->applySeasonModifier()
          ->applyDiscountRules()
          ->applyChannelCommission()
          ->applyTaxes()
          ->buildInvoice();
  }

}

// Domain rules evolve
// architecture decisions matter
// complexity grows over time

Volver a proyectos

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