[en] Technologies are in constant expansion and evolution, designing new techniques to comply with their aim. In software development, the tools and the guidelines for creating software products establish a piece which is in constant evolution, needed to make decisions about the projects to be created. One of the archetypes for software development is known as Domain Driven Design, where a big knowledge about the business to de modelled is needed in form of domain, with the knowledge of some elements like the identification of entities or a precise language. Great evolution in cloud computing and services with specific roles, denominated microservices, import certain concerns in the computing algorithms in which they operate, like the security in data processing. To achieve these requirements avoiding expensive control mechanisms, functional programming brings several elements, like immutable data, that grant languages facilities to reach this aim. The union of these elements and requirements produces what is called Functional Domain Driven Design. A variant that follows this software development model is Command-Query Responsability Segregation, a pattern based on the separation of the Domain into two distinct subsystems, one system responsible of controlling the execution flow, and another centered in query things about the first. The distributed computation and microservices also need to be scaled due to the growing number of system users. Scaling vertically is sometimes not linked to increase the performance and, due to this, scaling horizontally is a particular strength for these computational units, working together, replicating, to fulfil its function among multiple systems, balancing the load of the same. Distributed Domain Driven Design comes into play to provide the technics for implementing it.

[es] Las tecnologías están en constante expansión y evolución, diseñando nuevas técnicas para cumplir con su fin. En el desarrollo de software, las herramientas y pautas para la elaboración de productos software constituyen una pieza en constante evolución, necesarias para la toma de decisiones sobre los proyectos a realizar. Uno de los arquetipos para el desarrollo de software es el denominado Domain Driven Design, donde es importante conocer ampliamente el negocio que se desea modelar en forma de dominio, a través de ciertos elementos como la identificación de entidades o un lenguaje cuidado. La gran evolución de la computación en la nube y los servicios con funciones específicas, denominados microservicios, introducen ciertas necesidades en los algoritmos computacionales que manejan, como la seguridad en el procesamiento de los datos. Para alcanzar estos requisitos evitando mecanismos de control costosos, la programación funcional provee de múltiples elementos que confieren al lenguaje de capacidades para alcanzar este fin, como inmutabilidad de los datos. La unión de estos elementos y requisitos produce lo que se conoce como Functional Domain Driven Design. Una aplicación de este modelo de desarrollo de software será Command-Query Responsability Segregation, un patrón basado en la separación del dominio en dos subsistemas diferenciados, un sistema responsable del control del flujo de ejecución y otro centrado en las consultas a realizar sobre el primero. La computación distribuida y los microservicios también necesitan escalar dado el creciente número de usuarios del sistema. En ocasiones, escalar verticalmente no está ligado a aumentar el rendimiento y, por ello, la escalabilidad horizontal es un punto fuerte para estas unidades computacionales, al poder trabajar conjuntamente, replicándose, para cumplir su función entre múltiples sistemas, balanceando la carga de los mismos. Distributed Domain Driven Design entra en juego para proveer de técnicas para la implementación del mismo.