Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Prácticas recomendadas
Modele el dominio empresarial
Trabaje desde el dominio empresarial hasta el diseño del software para asegurarse de que el software que está escribiendo se ajusta a las necesidades empresariales.
Utilice metodologías de diseño basado en dominios (DDD), como la tormenta de eventos,
Escribe y ejecuta pruebas desde el principio
Utilice el desarrollo basado en pruebas (TDD) para verificar la exactitud del software que está desarrollando. El TDD funciona mejor a nivel de prueba unitaria. El desarrollador diseña un componente de software escribiendo primero una prueba, que invoca ese componente. Ese componente no tiene ninguna implementación al principio, por lo que la prueba falla. Como siguiente paso, el desarrollador implementa la funcionalidad del componente, utilizando dispositivos de prueba con objetos simulados para simular el comportamiento de las dependencias o puertos externos. Cuando la prueba tenga éxito, el desarrollador puede continuar implementando adaptadores reales. Este enfoque mejora la calidad del software y da como resultado un código más legible, ya que los desarrolladores entienden cómo los usuarios usarían los componentes. La arquitectura hexagonal apoya la metodología TDD al separar el núcleo de la aplicación. Los desarrolladores escriben pruebas unitarias que se centran en el comportamiento del núcleo del dominio. No tienen que escribir adaptadores complejos para ejecutar sus pruebas; en su lugar, pueden usar objetos y accesorios simulados simples.
Utilice el desarrollo basado en el comportamiento (BDD) para garantizar end-to-end la aceptación a nivel de funcionalidad. En BDD, los desarrolladores definen escenarios para las funciones y los verifican con las partes interesadas de la empresa. Las pruebas de BDD utilizan tanto lenguaje natural como sea posible para lograrlo. La arquitectura hexagonal apoya la metodología BDD con su concepto de adaptadores primarios y secundarios. Los desarrolladores pueden crear adaptadores principales y secundarios que pueden ejecutarse localmente sin necesidad de llamar a servicios externos. Configuran el conjunto de pruebas BDD para usar el adaptador principal local para ejecutar la aplicación.
Ejecute automáticamente cada prueba en el proceso de integración continua para evaluar constantemente la calidad del sistema.
Definir el comportamiento del dominio
Descomponga el dominio en entidades, objetos de valor y agregados (lea sobre cómo implementar un diseño basado en dominios
Defina las interfaces que los adaptadores pueden usar para interactuar con el dominio.
Automatice las prueba e implementación
Tras una prueba de concepto inicial, le recomendamos que dedique tiempo a implementar DevOps prácticas. Por ejemplo, las canalizaciones de integración continua y entrega continua (CI/CD) y los entornos de pruebas dinámicos ayudan a mantener la calidad del código y a evitar errores durante la implementación.
-
Ejecute sus pruebas unitarias dentro de su proceso de CI y pruebe su código antes de que se fusione.
-
Cree un proceso de CD para implementar su aplicación en un entorno de desarrollo y pruebas estático o en entornos creados de forma dinámica que admitan la integración y end-to-end las pruebas automáticas.
-
Automatice el proceso de implementación para entornos dedicados.
Amplíe su producto mediante microservicios y CQRS
Si su producto tiene éxito, amplíe su producto descomponiendo su proyecto de software en microservicios. Utilice la portabilidad que proporciona la arquitectura hexagonal para mejorar el rendimiento. Divida los servicios de consulta y los controladores de comandos en API sincrónicas y asincrónicas independientes. Considere adoptar el patrón de segregación de responsabilidades de consultas de comandos (CQRS) y la arquitectura basada en eventos.
Si recibe muchas solicitudes de funciones nuevas, considere la posibilidad de ampliar su organización en función de los patrones de DDD. Estructure sus equipos de tal manera que sean propietarios de una o más funciones como contextos acotados, como se ha explicado anteriormente en laOrganizational sección. Luego, estos equipos pueden implementar la lógica empresarial mediante el uso de una arquitectura hexagonal.
Diseñe una estructura de proyecto que se adapte a los conceptos de arquitectura hexagonal
La infraestructura como código (IAC) es una práctica ampliamente adoptada en el desarrollo de la nube. Le permite definir y mantener sus recursos de infraestructura (como redes, balanceadores de carga, máquinas virtuales y pasarelas) como código fuente. De esta forma, puede realizar un seguimiento de todos los cambios en su arquitectura mediante un sistema de control de versiones. Además, es posible crear y mover fácilmente la infraestructura para prueba. Le recomendamos que mantenga el código de la aplicación y el código de infraestructura en el mismo repositorio cuando desarrolle sus aplicaciones en la nube. Este enfoque permite mantener fácilmente la infraestructura de su aplicación.
Le recomendamos que divida la aplicación en tres carpetas o proyectos que correspondan a los conceptos de la arquitectura hexagonal:entrypoints
(adaptadores principales),domain
(dominio e interfaces) yadapters
(adaptadores secundarios).
La siguiente estructura de proyecto proporciona un ejemplo de este enfoque al diseñar una API enAWS. El proyecto mantiene el código de la aplicación (app
) y el código de infraestructura (infra
) en el mismo repositorio, tal como se recomendó anteriormente.
app/ # application code |--- adapters/ # implementation of the ports defined in the domain |--- tests/ # adapter unit tests |--- entrypoints/ # primary adapters, entry points |--- api/ # api entry point |--- model/ # api model |--- tests/ # end to end api tests |--- domain/ # domain to implement business logic using hexagonal architecture |--- command_handlers/ # handlers used to run commands on the domain |--- commands/ # commands on the domain |--- events/ # events emitted by the domain |--- exceptions/ # exceptions defined on the domain |--- model/ # domain model |--- ports/ # abstractions used for external communication |--- tests/ # domain tests infra/ # infrastructure code
Como se mencionó anteriormente, el dominio es el núcleo de la aplicación y no depende de ningún otro módulo. Se recomienda estructurar ladomain
carpeta para incluir las siguientes subcarpetas:
-
command handlers
contiene los métodos o clases que ejecutan comandos en el dominio. -
commands
contiene los objetos de comando que definen la información requerida para realizar una operación en el dominio. -
events
contiene los eventos que se emiten a través del dominio y, a continuación, se enrutan a otros microservicios. -
exceptions
contiene los errores conocidos definidos en el dominio. -
model
contiene las entidades de dominio, los objetos de valor y los servicios de dominio. -
ports
contiene las abstracciones a través de las cuales el dominio se comunica con bases de datos, API u otros componentes externos. -
tests
contiene los métodos de prueba (como las pruebas de lógica empresarial) que se ejecutan en el dominio.
Los adaptadores principales son los puntos de entrada a la aplicación, tal como los representa laentrypoints
carpeta. En este ejemplo se utiliza laapi
carpeta como adaptador principal. Esta carpeta contiene una APImodel
, que define la interfaz que el adaptador principal requiere para comunicarse con los clientes. Latests
carpeta contiene end-to-end las pruebas de la API. Se trata de pruebas superficiales que validan que los componentes de la aplicación están integrados y funcionan en armonía.
Los adaptadores secundarios, tal como los representa laadapters
carpeta, implementan las integraciones externas que requieren los puertos de dominio. Un repositorio de bases de datos es un excelente ejemplo de adaptador secundario. Cuando cambie el sistema de base de datos, puede escribir un nuevo adaptador mediante la implementación definida por el dominio. No es necesario cambiar el dominio o la lógica empresarial. Latests
subcarpeta contiene pruebas de integración externas para cada adaptador.