¿Cuáles son las pautas generales o reglas generales para cuándo usar un objeto específico de dominio frente a una cadena o número simple?
La pauta general es que desea modelar su dominio en un idioma específico de dominio.
Considere: ¿por qué usamos entero? Podemos representar todos los enteros con cadenas con la misma facilidad. O con bytes.
Si estuviéramos programando en un lenguaje agnóstico de dominio que incluyera tipos primitivos para entero y edad, ¿cuál elegirías?
Lo que realmente se reduce a la naturaleza "primitiva" de ciertos tipos es un accidente de la elección del lenguaje para nuestra implementación.
Los números, en particular, generalmente requieren un contexto adicional. ¡La edad no es solo un número, sino que también tiene dimensiones (tiempo), unidades (años?), Reglas de redondeo. Agregar edades juntas tiene sentido de una manera que agregar una edad a un dinero no.
Hacer distintos los tipos nos permite modelar las diferencias entre una dirección de correo electrónico no verificada y una dirección de correo electrónico verificada .
El accidente de cómo se representan estos valores en la memoria es una de las partes menos interesantes. Al modelo de dominio no le importa un CustomerId
es un int, o una cadena, o un UUID / GUID, o un nodo JSON. Solo quiere las posibilidades.
¿Realmente nos importa si los enteros son big endian o little endian? ¿Nos importa si lo List
que hemos pasado es una abstracción sobre una matriz o un gráfico? Cuando descubrimos que la aritmética de doble precisión es ineficiente, y que necesitamos cambiar a una representación de coma flotante, ¿ debería preocuparse el modelo de dominio ?
Parnas, en 1972 , escribió
En su lugar, proponemos que uno comience con una lista de decisiones de diseño difíciles o decisiones de diseño que probablemente cambien. Cada módulo está diseñado para ocultar tal decisión de los demás.
En cierto sentido, los tipos de valores específicos del dominio que presentamos son módulos que aíslan nuestra decisión de qué representación subyacente de los datos se debe utilizar.
Entonces, la ventaja es la modularidad: obtenemos un diseño donde es más fácil administrar el alcance de un cambio. La desventaja es el costo: es más trabajo crear los tipos a medida que necesita, elegir los tipos correctos requiere adquirir una comprensión más profunda del dominio. La cantidad de trabajo requerida para crear el módulo de valor dependerá de su dialecto local de Blub .
Otros términos en la ecuación pueden incluir la vida útil esperada de la solución (modelado cuidadoso para el software de script que se ejecutará una vez que tenga un retorno de la inversión pésimo), qué tan cerca está el dominio de la competencia central del negocio.
Un caso especial que podríamos considerar es el de la comunicación a través de un límite . No queremos estar en una situación en la que los cambios en una unidad desplegable requieran cambios coordinados con otras unidades desplegables. Por lo tanto, los mensajes tienden a centrarse más en las representaciones, sin tener en cuenta los invariantes o los comportamientos específicos del dominio. No vamos a tratar de comunicar "este valor debe ser estrictamente positivo" en el formato del mensaje, sino comunicar su representación en el cable y aplicar la validación a esa representación en el límite del dominio.
people may be one or two years older in Asian reckoning than in the western age system
Age
clase en lugar de un número entero cuando necesita el comportamiento adicional que tal clase proporcionaría.