¿Qué es un dominio?

104

Veo mucho este término en el contexto de la arquitectura de software ("modelo de dominio", "diseño impulsado por dominio", etc.). Lo busqué en Google, pero obtengo toneladas de definiciones diferentes. Entonces, ¿qué es en realidad?

Sipo
fuente
12
Desafortunadamente, creo que es una de esas palabras que no tiene una definición clara y se usa mucho en contextos ambiguos. Sin embargo, después de verlo lo suficiente, obtienes una comprensión. Mi punto es que no debe esperar comprender su uso incluso después de leer todas las respuestas que verá aquí. Tomará tiempo.
aaaaaa
15
@aaaaaa exactamente ... Humpty Dumpty sonrió con desprecio. ... "Cuando uso una palabra", dijo Humpty Dumpty, en un tono bastante despectivo, "significa exactamente lo que elijo que signifique, ni más ni menos".
emory
3
No creo que sea cierto que no tenga una definición clara. Si observa la definición normal de webster, verá que es "una región sobre la cual se ejerce el dominio", "una región marcada distintivamente por alguna característica física". Definición similar en matemáticas: el "dominio" de una función. Se puede dividir una gran cosa en dominios o regiones en función de quién es responsable de esa región, o en función de algunos criterios. Algo así como un módulo. Por lo tanto, un 'modelo de dominio' (en mi opinión) es un modelo con el que puede trabajar en la lógica de negocios de su aplicación. DDD también tiene que ver con tipos de "regiones".
Sava B.

Respuestas:

9

La palabra "dominio" en el libro Diseño impulsado por dominio de Eric Evans tiene un significado específico. De eso se trata el software.

Sin embargo, Evans va más allá. En su opinión, hay subdominios incluso con el mismo software. Y esta es la parte del libro que trata sobre "Diseño estratégico".

Hay tres "dominios": el dominio central, el dominio de soporte y el dominio genérico. A veces se referirá a estos como subdominios.

Evans también se preocupa profundamente por el negocio real detrás del software y el libro no solo está dirigido a desarrolladores, sino también a arquitectos y gerentes que necesitan ver cómo el software y el negocio pueden trabajar juntos, y eso es lo que le preocupa cuando discute el diseño estratégico y estos subdominios.

Entonces, el dominio central es la parte del software que representa tanto la ventaja competitiva como la “razón de ser” del software. Es la parte del software que es la razón por la cual un cliente compraría el software frente a algún otro software. Por lo general, Evans lo ve como el dominio que contiene el menor porcentaje de código. Puedes considerarlo como el 20% más importante. Es la parte que realmente no puede comprar en el estante y podría ser solo un módulo o componente único del software en general.

El dominio de soporte sigue siendo importante y puede ser exclusivo de la organización, pero no es tan importante como el dominio central. Sin él, el software no será tan valioso y el núcleo depende de él. Podrían ser múltiples módulos en el software que usted mismo ha escrito y que realizan funciones importantes pero de apoyo al núcleo.

El dominio genérico es la parte menos personalizada y, en cierto sentido, la parte menos importante del software. Es posible que lo haya escrito en casa, pero podría ser más eficiente simplemente comprarlo en el estante o usar un software de código abierto conocido. Esta parte del sistema probablemente no sea específica de su dominio general, por lo que, por ejemplo, si tiene un sistema de envío que enruta paquetes o un sistema de registros de salud que administra a los pacientes, el dominio genérico es la parte de estos sistemas que son comunes y solo simplemente necesita estar allí para funcionar en absoluto. Esto probablemente constituye la mayor parte del sistema en general, pero no necesariamente.

Desde una perspectiva comercial, es importante decidir cuál es su dominio principal y enfocar allí sus recursos de desarrollo. Evans tiene muchos videos, particularmente en el sitio de InfoQ, donde explica estos conceptos con más detalle.

Entonces, si bien a menudo hablamos sobre "el dominio" en el software, en el caso de DDD, no es tan simple como parece.

Debo señalar que los conceptos de DDD no necesariamente existen en la comunidad de software en general. Otros desarrolladores, autores y personas de productos pueden tener ideas y definiciones diferentes, algunas más sutiles y otras menos. Incluso otros autores que han escrito sobre DDD podrían pasar por alto estos conceptos en el libro de Evans, pero creo que los conceptos siguen siendo útiles al escribir y planificar un proyecto de software.

RibaldEddie
fuente
1
Re: su último párrafo: ¿quizás deberíamos llegar a un acuerdo sobre el dominio central del desarrollo de software? Pero, como acordar qué es OOP, o Funcional o cualquier otro término, creo que Humpty Dumpty ganó hace mucho tiempo.
@nocomprende no, estos conceptos son específicos de un software individual particular en una organización particular en un momento particular. Por lo tanto, el dominio principal para MSFT Windows será diferente según las condiciones del mercado, las expectativas del cliente, etc.
RibaldEddie
1
Supongo que me recuerda el viejo dicho: "Hay 2 tipos de personas: los que dividen a las personas en dos tipos, y los que no lo hacen". Pero ... para el segundo tipo de personas solo habría un tipo de personas ... - error de indirección infinita - sistema detenido
@nocomprende, lo siento, no entendí realmente tu primer comentario: la parte de "estar de acuerdo" en el dominio central del desarrollo de software fue una broma.
RibaldEddie
109

El dominio es el contexto del mundo real en el que intentas resolver un problema usando un software. Cada dominio viene con experiencia, vocabulario y herramientas que forman parte de ese dominio.

Un ejemplo específico de un dominio podría ser algo así como "el mecanizado automatizado de piezas complejas utilizando una cortadora giratoria de alta velocidad". El sistema de software y hardware que logra esto se llama un molino CNC .

Otro ejemplo de un dominio es el departamento de contabilidad de una corporación.

Lecturas adicionales
Contexto limitado por Martin Fowler

Robert Harvey
fuente
44
Sip. Cuando lee "dominio", podría sustituir "un área de especialización o inquietud" (limitada a un determinado) ".
KlaymenDK
1
Lo interesante a tener en cuenta es que el dominio del software realmente no tiene nada que ver con lo que los humanos están tratando de lograr o lo que entenderían. Estoy seguro de que la computadora simple en mi automóvil está haciendo cosas para optimizar la combustión de la que no sé nada, y francamente no me importa. Asumir que el software tiene que ver con la perspectiva y los deseos humanos es un malentendido muy peligroso. Esto podría ser útil ya que los sistemas de software abarcan áreas más grandes, con una mayor conciencia y capacidad de elegir objetivos. Oye, espera, ¿Asimov no pensó en eso hace tanto tiempo?
1
@ user251748 - Bueno, creo que se trata de humanos y los procesos en los que están involucrados, pero no necesariamente sobre lo que las personas entienden instantáneamente.
Sipo
38

Simplemente significa el espacio problemático en el que está trabajando. Por ejemplo, si estuviera creando un sitio web de comercio electrónico, su dominio sería "comercio electrónico" e implicaría los procesos asociados con las prácticas de ventas de su cliente / empresa. Por lo tanto, un modelo de dominio sería algo para representar un producto o una factura o un registro de envío.

Becuzz
fuente
77
Um, dado que los sitios web domain namestambién se conocen como dominios, creo que deberías aclarar cómo estás usando la palabra dominio aquí.
YetAnotherRandomUser
@YetAnotherRandomUser: para mí, está bastante claro lo que quiso decir. ;)
Sipo
19

Un dominio es un área de conocimiento. Puede considerarse como una actividad en la que existen problemas resueltos por su software. ( Wiki , comunidad DDD )

Eric Evans en su libro, utiliza el envío de carga para explicar qué es DDD. En su ejemplo, el dominio tiene que ver con el envío . Cómo se mueve, maneja, envía y rastrea la carga, etc. Viene con sus propias reglas, lenguaje y procesos específicos. Esos crearán modelos de dominio, objetos, servicios, etc.

Cuando crea una aplicación, tendrá algún tipo de autorización, al igual que en el mundo real del envío, no todos pueden acceder a los almacenes. La forma en que los usuarios están autorizados y cómo se otorgan los permisos puede estar fuera del dominio , porque la información puede no ser relevante para el envío de carga.

En pocas palabras: un dominio es donde haces negocios . Si su negocio es el envío de carga, el envío de carga será su dominio. Si su negocio está en autenticar y autorizar personal, este será su dominio.

potfur
fuente
7

Del diseño dirigido por el dominio: abordar la complejidad en el corazón del software , Eric Evans:

Cada programa de software se relaciona con alguna actividad o interés de su usuario. Esa área temática a la que el usuario aplica el programa es el dominio del software.

El dominio de un programa de reserva de aerolíneas implica que personas reales se suban a aviones reales.

El dominio de un programa de contabilidad es dinero y finanzas.

El dominio de un sistema de control de código fuente es el desarrollo de software en sí.

El modelo de dominio, entonces, es "una abstracción rigurosamente organizada y selectiva de" el conocimiento en la cabeza de un experto en dominio.

Palermo, al describir la arquitectura de la cebolla, ofreció este resumen

En el centro mismo vemos el Modelo de dominio, que representa la combinación de estado y comportamiento que modela la verdad para la organización.

Fowler, a su vez, ofrece

Un modelo de objetos del dominio que incorpora tanto el comportamiento como los datos.

Si está buscando definiciones más recientes, es más probable que encuentre referencias de que el modelo de dominio y el modelo de datos son diferentes . No considero que un cambio de significado sea tanto como un cambio de énfasis: modelar los comportamientos (la forma en que los datos cambian en respuesta a la información desde fuera del modelo) tiene una complejidad y variación más rica que las diferentes formas de escribir las cosas. .

VoiceOfUnreason
fuente
Ajustaría suavemente su definición de actividades del mundo real a lo que está haciendo el sistema informático. Por ejemplo, "El dominio de un sistema de control de código fuente es": almacenamiento y recuperación de archivos de código fuente . Los dominios están modelados, no para manejar cosas del mundo real, sino para hacer que los sistemas de programación sean más fáciles de construir y mantener. Entonces, el énfasis está en lo que una computadora puede hacer para facilitar eso, no en lo que los humanos pueden hacer. Los rayos X digitales mejoran la sensibilidad y el procesamiento de imágenes del proceso de rayos X, no hacen nada por los humanos y serían igual de útiles para el escaneo de equipaje sin supervisión.
2

Dado que probablemente ya tenga una idea de qué es el dominio, supongo que el siguiente paso que tomará será tratar de definir el subdominio, el modelo de dominio y, lo que es más importante, el contexto acotado.

Sin embargo, empiezo poniendo mi perspectiva de dominio.

Dominio

El dominio es la realidad que habitamos: sus entidades, su comportamiento, las leyes que obedecen. Existió antes que nosotros y existirá después de nosotros, de una forma u otra. Su existencia no depende de nuestra conciencia. Los especialistas en marketing presentan nuevas funciones y realizan análisis de mercado, los gerentes de cuentas clave se comunican con los clientes, los desarrolladores de software automatizan los procesos comerciales. Es por eso que el dominio se llama un espacio problemático.

Subdominios

DDD implica la descomposición del dominio en subdominios, para facilitar su modelado y comprensión. El hecho mismo de que dirijas un negocio infiere que hay al menos un valor comercial predominante. Con el que ganas dinero. Para el que comenzamos nuestro negocio. Entonces, incluso si no conoce una palabra como "Dominio principal", todavía está presente. Lo mismo se aplica a los subdominios: probablemente necesitará una contabilidad, recursos humanos, soporte técnico, pero es secundario.

Modelo de dominio

No hay necesidad de modelar subdominios extraídos en su totalidad. Hay un cierto conjunto de reglas en cada subdominio que nos interesa. Un conjunto de reglas en algún subdominio que es necesario para lograr un determinado resultado comercial se llama modelo.

Contextos limitados

Lo más importante es que el contexto acotado es un límite lógico.

Cuando se definen los subdominios y el dominio central, es hora de implementar el código. El contexto acotado define límites tangibles de aplicabilidad de algunos subdominios. Es un área donde cierto subdominio tiene sentido, mientras que los otros no. Puede ser una charla, una presentación, un proyecto de código con límites físicos definidos por el artefacto.

¿Que sigue?

Si está interesado en cómo el concepto de contexto limitado se correlaciona con el concepto de subdominio, cómo definir subdominios y contextos limitados, cómo representar su comunicación entre sí y cómo organizar equipos con estos conceptos en mente, probablemente le interesaría la lectura adicional .


fuente
Yo diría que un dominio para software es lo que hace el software. Ciertamente, no existía antes que nosotros, y está totalmente inventado por nosotros, para hacer cosas que queremos delegar para que sucedan sin nuestra interacción. En otras palabras, se trata de un sueño que tuvimos, que queremos olvidar. Y, rápidamente olvidamos cómo funciona el software tan pronto como se implementa. El software es un juego que se adapta mejor a las computadoras, solo lo hicimos hasta ahora porque aún no habíamos construido las computadoras, para resolver el problema por el que ya no queremos que nos molesten. Pero, muy pronto ...
No me dejé claro en esta parte: "ante nosotros", mi mal. No quise decir que ese dominio existiera antes de la raza humana. Por "nosotros" me refería más a un desarrollador de software que resuelve un problema de automatización, por ejemplo, de procesos de negocios en el comercio electrónico. El concepto de comercio aparentemente existía antes que ellos. Entonces, la responsabilidad del desarrollador es hacer posible delegar cosas a las computadoras, como usted dijo.
Derecha. Mi punto es que la gente piensa que los sistemas informáticos son una forma de lidiar con el mundo real. Pero las computadoras aportan muchas ideas, requisitos y preocupaciones que simplemente nunca formaron parte del dominio. Es como decir que la cirugía es una forma de lidiar con problemas emocionales. Bueno, la lobotomía funciona, pero los problemas emocionales tienen poco que ver con el cerebro. Y mis sentimientos se ven fuertemente afectados por las hormonas y los neurotransmisores, entonces, ¿los ISRS son parte de la biología, la psicología, las relaciones o son una categoría en sí mismos? Las computadoras son sobre computadoras, no sobre cosas reales.
1
Las computadoras tratan de modelar cosas reales. Solo otra área en la que se podrían hacer cosas reales, se podrían implementar procesos comerciales reales, se podrían aplicar restricciones comerciales reales. Por ejemplo, hace 50 años le habría pagado $ 1 al cajero en una tienda, ahora todo el proceso de compra podría ser sin interacción con el ser humano. Sin embargo, mi dinero real fue retirado de mi cuenta bancaria real. Por lo tanto, no importa lo que esté involucrado en ningún proceso, computadora o humano o algo más. Probablemente podría ser de su interés: medium.com/@wrong.about/…
El dinero no es real. Los procesos comerciales no son reales. Todo de lo que podemos hablar es un concepto, no real.