Multimarca y multipaís: un identificador no es el otro
En una aplicación con varias marcas y países, la mitad de los bugs raros salen de haber usado un identificador donde iba otro. Marca, país, idioma, moneda y mercado son cinco cosas distintas que casi siempre coinciden, hasta que no.
En un producto que opera varias marcas en varios países, hay cinco datos que viajan juntos casi siempre: la marca, el país, el idioma, la moneda y el mercado. Como casi siempre coinciden, se usan indistintamente.
Y un día aparece la excepción: un país con dos idiomas, una marca que opera en tres países, un país donde se factura en otra moneda. Ahí el código que usaba uno por otro deja de funcionar, y el error es difícil de encontrar porque es correcto en el 95% de los casos.
Las cinco dimensiones
| Dato | Decide | Dónde se rompe al confundirlo |
|---|---|---|
| Marca | Identidad visual, dominio, catálogo, condiciones comerciales | Mandar a alguien al sitio de otra marca del grupo |
| País | Impuestos, medios de pago, requisitos legales, formato de documento | Validar un identificador fiscal con la regla equivocada |
| Idioma | Los textos | Un país con dos idiomas oficiales muestra el que no corresponde |
| Moneda | Cómo se muestra y se cobra | Formatear con el símbolo correcto y el separador de otro país |
| Mercado o región | Qué funcionalidades están habilitadas | Habilitar algo que en esa plaza todavía no existe |
El caso del idioma es el más recordable: derivar el idioma del país funciona hasta que aparece el primer mercado bilingüe, y ahí no hay un solo lugar que arreglar sino todos los que hicieron la misma suposición.
Qué se comenta en la review
Cuatro señales concretas
- Un
switchpor marca que en realidad depende del país. Anda porque hoy cada marca opera en un solo país. El día que una marca entra a otro mercado, hay que reescribirlo entero. - Formatos derivados del idioma. Fechas y números dependen de la convención local, que va con el país, no con el idioma del texto.
- Un identificador de marca usado como clave de traducción. Mezcla dos conjuntos que crecen por motivos distintos.
- Un default que cae a la marca o al país principal. Lo más peligroso del conjunto: en vez de no mostrar algo, muestra el contenido de otra marca.
Reglas que sostienen esto en el tiempo
Cinco decisiones que evitan la familia entera de bugs
- Tipos distintos para cosas distintas. Si marca, país e idioma son todos cadenas, nada impide pasar una donde va otra. Con tipos separados, el compilador lo impide.
- Una sola fuente de la configuración por mercado. Una tabla que diga, para cada combinación, qué moneda, qué idiomas y qué funcionalidades. No condicionales repartidos.
- Nunca derivar una dimensión de otra. Si hace falta el idioma, que llegue el idioma.
- El caso desconocido no cae a nada: se registra y se oculta la funcionalidad, en vez de asumir el valor principal.
- Probar con al menos dos configuraciones distintas. Un único conjunto de datos de prueba con la marca principal esconde todos los problemas de este tipo.
Antes de seguir, predecí
Las cinco que casi siempre coinciden
Las cinco dimensiones que viajan juntas. En las primeras configuraciones coinciden perfectamente.
Cómo no se propaga el problema
Cierre
Autoevaluación
¿Lo entendiste?
Práctica