Arquitectura de aplicaciones limpio "larga" ¿Qué tipo?

Ali hermana REVISIÓN: Autor Zhang Jianfei Alibaba expertos de alto nivel técnico, la División de seis años, creó el COLA. Con la esperanza de explorar un conjunto de aplicación práctica especificación de arquitectura que no es superior en el papel, pero puede ser copiado, se puede apreciar, el suelo, se puede controlar la complejidad de la orientación y la moderación. En este artículo se detalla la iteración de actualización de la COLA.

 

Muchos estudiantes y más de una vez Tengo comentarios, nuestro sistema es muy confuso, principalmente en:

 

  • jerarquía de aplicación confusión: no se sabe cómo aplicar debe ser jerárquica, lo que debería contener lo que la relación entre los componentes, los componentes son;

  • La falta de directrices y limitaciones estandarizados: Adición de nueva lógica de negocio no saben (que clase, qué paquete) en lo que, de lo que debe ser el nombre más apropiado?

 

Para resolver estos problemas, lo que creará uno de corazón a temprana edad COLA (https://github.com/alibaba/COLA) - Los intentos de explorar un conjunto de prácticas especificación de arquitectura de aplicación que no es superior en el papel, pero pueden ser copiados , se puede apreciar, el suelo, se puede controlar la complejidad de la orientación y la moderación.

 

Desde el COLA nació, he recibido un montón de comentarios y sugerencias. Al mismo tiempo, en mi propia práctica, también se encuentran muchas deficiencias COLA 1.0, algún diseño redundante no es necesario, pero no incluye algunos elementos clave. Por ejemplo, yo estaba pensando recientemente acerca de la aplicación principal negocio compleja arquitectura y el código de gobierno es una reflexión sobre el COLA 1.0.

 

Explorar la combinación de la práctica y la reflexión en curso sobre la complejidad del tratamiento, decidí llevar a cabo una amplia COLA actualización, por lo que con la corriente COLA 2.0.


De 1,0 a 2,0, un simple cambio no es sólo números, sino también para mejorar el concepto de arquitectura y diseño, los principales cambios puntuales incluyen:

 

  • La nueva arquitectura de capas: capa de dominio ya no depende directamente de la capa de infraestructura.

  • Nueva división de componentes: el componente redefinió y división, añaden nuevos componentes, además de algunos componentes viejos (Validador, Convertor, etc.).

  • El nuevo diseño del punto de extensión: la introducción de un nuevo concepto, por lo que la expansión es más flexible.

  • La nueva biblioteca de Posicionamiento segunda parte: segunda biblioteca fiesta acaba DTO, es el modelo de dominio de la expresión y la realización de peso ligero.

 

La nueva arquitectura de capas

 

En COLA 1,0, que estructura jerárquica de capas clásico se muestra a continuación:


 

En el COLA 2,0, o estos niveles, pero los cambios de dependencia, la capa de dominio ya no depende directamente de la capa de infraestructura, pero introduce el concepto de una puerta de acceso con DIP (dependencia Inversion Principio, dependencia inversión) capa de inversión y el dominio capa dependencia Infraestructura, la relación tal como se muestra a continuación:


 

La ventaja de esto es la capa de dominio será más puro, completamente libre de la dependencia de los detalles técnicos (así como los detalles técnicos aportan complejidad), al igual que la paz de la mente para hacer frente a la lógica de negocio.

 

Además, hay dos beneficios:


1. Desarrollo paralelo: Mientras que la interfaz es una buena concordancia entre el dominio e Infraestructura, dos estudiantes pueden tener que escribir código paralelo de dominio e Infraestructura.

2. la capacidad de prueba: No de dominio que son clases POJO dependientes, la unidad de prueba será muy conveniente, muy adecuado para el desarrollo de TDD.

 

división de nuevos componentes

 

Y el módulo de definición de componente

 

En primer lugar, seamos claros acerca de la definición del concepto de componente (Componente), el componente de Java (o en este artículo), su alcance es el paquete de Java (paquete).

 

Hay una palabra llamada módulo (módulo), componentes y módulos estos dos conceptos es más propenso a confusión. Por ejemplo, en "Design Driven Ejecución de dominio", los autores dicen:

 

Si está utilizando Java o C #, que ya está familiarizado con los módulos, que las sepan por otro nombre. Java los llama paquetes. C # los llama espacios de nombres.

 

Se cree paquete del módulo, creo que esta definición es confuso. Especialmente cuando se utiliza Maven, y en Maven, Módulo es un artefacto, por lo general un tarro en lugar del paquete. Por ejemplo comprende cuatro Módulo Marco COLA:

 

 

<Módulos>

    <Módulo> cola común </ modulo>

    <Módulo> cola-core </ module>

    <Módulo> Cola-extensión </ modulo>

    <Módulo> Cola-test </ modulo>

</ Módulos>

 

De hecho, el módulo de componentes y estos dos conceptos son similares, es probable que cause confusión. Por ejemplo, hay una pregunta en StackOverflow [1], es preguntar a la diferencia entre el módulo y componentes. La respuesta es conseguir el mayor elogio que se distingue por alcance.

 

Los términos son similares. Yo por lo general pienso en un "módulo" de ser más grande que un "componente". Un componente es una parte única, por lo general relativamente pequeña en su alcance.

 

La respuesta y mi reacción visceral es lo mismo, que es más grande que los componentes del módulo. Basado en la información anterior, estoy aquí para llevar a cabo algunas definiciones de componentes del módulo y descrito en el presente documento, cumplirá con las siguientes definiciones y notación (notación).

 

  • Module (Módulo): y Maven módulo definido en consistente, fácil de entender tarro. Expresó cubo.

  • Componente (Componente): y en UML definen de forma similar, sencillo de entender paquete. Representado por los componentes UML de la fig.

 

A Moudle compone generalmente de una pluralidad de componentes, y la notación relación como sigue:


 

COLA 2.0 Componentes

 

En el COLA 2.0, hemos rediseñado componentes, presenta algunos componentes nuevos, sino también a algunos viejos componentes retirados. El propósito de estos cambios es hacer la aplicación más clara estructura, componentes responsabilidades con mayor claridad, con el fin de mejor orientar el desarrollo y la moderación.

 

La nueva estructura de componentes como se muestra a continuación:


 

Estos componentes tienen cada uno sus propias áreas de responsabilidad, la responsabilidad es una parte importante componente de la COLA, es decir por encima de nosotros "orientación y la moderación." funciones detalladas de estos componentes se describen a continuación:

 

  1. Segundas partes componentes de la biblioteca:

    • api: la interfaz se almacena en aplicaciones externas.

    • dto.domainmodel: utilizado para la transmisión de datos en el campo de los objetos ligeros.

    • dto.domainevent: utilizado para la transmisión de datos de eventos de campo.

  2. Aplicación en componentes:

    • Servicio: Fachada implementación de la interfaz, sin la lógica de negocio, puede incluir diferentes adaptador de terminal.

    • eventhandler: procesamiento de eventos artes, incluyendo este dominio y el dominio extracelular.

    • ejecutor: para el comando de procesamiento (Comando) y la consulta (Consulta), al negocio complejo, y puede incluir Fase Paso.

    • interceptor: AOP mecanismo para el manejo de todas las solicitudes COLA proporcionado.

  3. Dominio en el que los componentes:

    • Dominio: entidades de dominio, permitiendo que el modelo de dominio herencia.

    • DomainService: servicios de campo, capacidad de campo para proporcionar un grano más grueso.

    • gateway: la puerta de enlace de interfaz dependencia externa, incluyendo el almacenamiento, RPC, Buscar y así sucesivamente.

  4. Infraestructura en los componentes:

    • config: información de configuración relacionada.

    • mensaje: el procesamiento de mensajes relacionados.

    • repositorio: relacionados con el almacenamiento, la puerta de enlace especializado se utiliza principalmente para las operaciones CRUD datos presente de campo.

    • gateway: la realización de la dependencia externa de puerta de enlace de interfaz (Domain en la puerta de entrada) de.

 

Al utilizar COLA, intenta seguir componentes estandarizados para construir nuestras limitaciones de aplicación. Esto permite que nuestra aplicación una estructura clara a seguir. Así son las cosas, el mantenimiento de código y comprensibilidad se verá muy mejorado.

 

El nuevo diseño del punto de extensión

 

La introducción de nuevos conceptos

 

Antes de la discusión, vamos a definir lo que es un nuevo concepto introducido en el diseño de expansión COLA2.0: negocio, casos de uso, escenarios.

 

  • Negocio (Business): es un auto-financiación del organismo de financiación, tales como tmall, minorista y Taobao es a través de tres negocios diferentes.

  • Con el Ejemplo (Caso de Uso): describe la interacción entre el usuario y el sistema, cada uno de los cuales proporciona uno o más escenarios de casos de uso. Por ejemplo, la orden de pago es un caso de uso típico.

  • Escenario (Escenario): escenario también se denomina una instancia del caso de uso (instancia), comprende todo posible forma de realización de los casos (normal y anormal). Por ejemplo, para la "orden de pago" de casos de uso, no "se puede utilizar para pasar el canto", "falta de equilibrio Alipay", "falta de saldos de cuentas bancarias" y muchas otras escenas.

 

En pocas palabras, una pluralidad de casos de uso de negocio se compone de una pluralidad de escenas con la forma de realización se compone. Un ejemplo sencillo de uso hacen de Taobao, casos de uso y escenarios de negocio en la siguiente relación:


 

Implementar nuevos puntos de extensión

 

En COLA 2.0, ningún cambio en la aplicación de un mecanismo de extensión, el principal cambio es que los nuevos conceptos introducidos anteriormente. Debido COLA se extienden desde el anillo de diseño de 1.0 estrellas, por lo que el tamaño de la expansión original también copiar el anillo de estrellas "identidad de la empresa". El método de posicionamiento extendida 1,0 COLA muestra a continuación:


 

Sin embargo, en la práctica, puede soportar múltiples escenarios de negocio tan infrecuente como el anillo de estrellas. Más apoyo es diferenciada con diferentes escenarios de casos de uso, no use los casos, o la derecha. Por ejemplo, el "Crear producto" y "actualización del producto" son dos casos de uso, pero la mayor parte del código de negocio pueden ser reutilizados, y sólo una pequeña parte de la necesidad de diferenciar el tratamiento.

 

Para apoyar esto más soporte extendido de grano fino, además de la anterior "identidad empresarial (BizId)", también introduje un caso de uso de escenarios y estos dos conceptos. La colocación de una nueva extensión como se muestra a continuación:


 

Se puede ver en el nuevo marco de extensión, el original sólo puede ofrecer a la "identidad de la empresa" de la expansión, ahora es compatible con la "identidad de la empresa", "caso", "escena" tres extensiones, sin duda, será más flexible que la anterior y más, y también en la expresión de la buena y comprensible que antes.

 

En el nuevo marco extensión, como la imagen de arriba podemos lograr la expansión de la muestra: En tmall este negocio - los casos de un solo uso - de la escena 88VIP - una verificación de la identidad del usuario se expanda, sólo tenemos que declarar una de las siguientes la puesta en práctica de extensión (extensión) en él.

 

 
 

 

 

 

La nueva biblioteca de posicionamiento segunda parte

 

Alrededor de dos superficies laterales de la vista de biblioteca de posicionamiento, es un problema sencillo, debido a que las dos bibliotecas y servicios de terceros es nada menos que exponer interfaces y la transferencia de datos (DTO). Sin embargo, para el pensamiento profundo, no es una cuestión sencilla, ya que se relaciona con problemas de coordinación entre los diferentes contextos límite (Limitado Contexto).  La cuestión de la importancia que tiene la arquitectura en entornos distribuidos, diferentes servicios (SOA, RPC, micro-servicios, diferentes nombres, naturaleza diferente) entre la colaboración.

 

La colaboración entre acotada Contexto

 

Cómo permitir la colaboración entre los diferentes dominios, garantizando al mismo tiempo la integridad del concepto en sus respectivos campos es una metodología establecida. En general, es probable que haya dos maneras: Compartiendo el núcleo (kernel compartido) y revestimiento (ACL, Anticorrupción Layer).

 

1. Compartir el núcleo (kernel compartido)

 

Es posible que sólo uno de los equipos mantendrán el código, construir y probar por lo que se comparte. Un Compartido núcleo es a menudo muy difícil de concebir en el primer lugar, y difícil de mantener, ya que debe tener una comunicación abierta entre los equipos y el acuerdo constante sobre lo que constituye el modelo para ser compartida.

 

Lo anterior es una referencia a "DDD Distilled" (El autor es Vaughn Vernon) palabras originales en Shared Kernel describen, la ventaja Share (reducir la duplicación), sus deficiencias son Share (ajustado acoplamiento entre los equipos).

 

2. recubrimiento (ACL, Capa Anti-Corrupción)

 

Un Anticorrupción capa es la relación de mapeo de contexto defensivo más, donde el equipo aguas abajo crea una capa de traducción de idiomas entre su ubicua (modelo) y el Lenguaje Ubicuo (modelo) que se encuentra aguas arriba de la misma.

 

 

También desde "DDD Distilled", es aislar el enfoque más exhaustivo de revestimiento tiene la ventaja que NO (desacoplamiento completo, cada uno independientemente), que no es inconveniente Share (a ciertos costes de conversión).

 

Pero mi punto de vista y casi Vernon, están más a favor de la práctica de la capa anti-corrosión. Debido a este aumento en la conversión semántica Chen, en comparación con la capacidad de mantenimiento del sistema y la comprensibilidad, es totalmente la pena.

 

Siempre que sea posible, usted debe tratar de crear una capa de lucha contra la corrupción entre su modelo de aguas abajo y un modelo de integración aguas arriba, de manera que se puede producir conceptos modelo en su lado de la integración que se ajustan específicamente a sus necesidades de negocio y que le mantienen completamente aislado de conceptos extranjeros.

 

Reposicionamiento de las librerías de segunda parte

 

En la mayoría de los casos, la biblioteca es de hecho un servicio bidireccional se utiliza para definir las interfaces y protocolos de datos. Pero la segunda parte diferente de la biblioteca JSON en el que no es sólo el protocolo, es un objeto de Java, un paquete tarro.

 

Dado que es un objeto Java, significa que podemos hacer DTO realizar más funciones además del captador, organismo de. Este problema no causó mi atención antes, pero en los últimos modelo de dominio de tiempo de pensar, he encontrado que podemos hacer dos bibliotecas partido a asumir más responsabilidad de desempeñar un papel más importante.

 

De hecho, Ali, he encontrado que algunos equipos ya se encuentran en la práctica tal, y creo que los resultados fueron bastante buenos. Por ejemplo, en la biblioteca segunda parte categoría de mesa, en este asunto de hacer una mejor demostración. de artículos es una lógica más compleja, que implica una gran cantidad de cálculos, nos fijamos en las bibliotecas segundo partido categoría de código es la forma de escribir:

 

 

 

En el código anterior, podemos ver que esto ha ido mucho más allá del alcance de la DTO, este es un modelo de dominio (tiene datos, el comportamiento de herencia). El derecho a hacerlo? Creo que es apropiado:

 

  • En primer lugar, todos los datos DefaultStdCategoryDO utilizados son auto-consistente, que estos cálculos sin la ayuda de la ayuda exterior, su propia para completar. Por ejemplo, para determinar si se trata de la categoría raíz, si se trata de una categoría de la hoja, obtener el nombre de la ruta de la categoría, que son por su cuenta para completar.

  • En segundo lugar, se trata de un núcleo común, me pongo en el campo del conocimiento (lengua, los datos y el comportamiento) a través de una doble vía expuesto a la biblioteca, si hay 100 aplicaciones que requieren el uso de isRoot () para hacer un juicio, no es necesario para poner en práctica la .

 

¿Qué? No quiere decir que la práctica recomendada de compartir el núcleo de ella? (Derecha Bueno, los niños Caifen o incorrecto, por favor). Compartiendo el kernel aquí creo que es positivo, y en particular, las categorías de datos que la luz, la escena de la computación pesada. Sin embargo, la proporción causada por estrecho acoplamiento es de hecho un problema. Así que si yo soy una categoría de consumidor del servicio, yo elegiría para ir con una envoltura de paquete Categoría de multiplexación, para que ambos puedan reutilizarla en el área de la capacidad, pero también pueden desempeñar un papel en el aislamiento de la corrosión.

 

COLA en las bibliotecas de dos partidos

 

Una vez dicho esto, creo que debería tener que entender mi actitud frente a las librerías de segunda parte. Sí, las dos partes no deben ser sólo una biblioteca de interfaz y DTO, pero una parte importante del campo, es un medio importante para lograr el Kernel Shared.

 

Por lo tanto, tengo la intención de ampliar el alcance de las responsabilidades de las bibliotecas de segunda parte en COLA 2,0 pulg. Los puntos principales incluyen:

 

  1. biblioteca de modelos de dominio de segundo partido es también una parte importante del campo, una "ligera" en el campo de la capacidad de expresar, el llamado "ligera" es que la auto-expresión es la cohesión adecuada y suficiente, similar a la anterior, dijo StdCategoryDO caso. Por supuesto, las habilidades también tienen que seguir el lenguaje común (Ubiquitous Language).

  2. La colaboración entre los diferentes Contexto acotada, hacer pleno uso de puente de buenas bibliotecas segundo partido. Cooperando manera mostrada a continuación.

 

Tenga en cuenta que esto es sólo una propuesta, no una norma. De hecho, siempre tenemos que hacer un compromiso entre el intercambio y el acoplamiento, no hay mundo perfecto de la arquitectura, no existe un diseño perfecto.  Se ajusta, se necesita poseer las escenas reales en sí para decidir.

 

marco COLA del mecanismo de extensión

 

Hasta el momento, el punto 2.0 COLA alteración he confesado casi lo mismo. Huevo y añadir una barra. Filtraciones sobre el COLA (marco) como marco de cómo se extendió el apoyo.

 

A medida que se va a integrar a completar una tarea específica en el sistema, como por ejemplo un logback marco de registro de un componente del marco es ayudar a resolver registro de impresión, formato de registro, almacenamiento de registros y otros temas. Pero frente a una variedad de escenarios de aplicación, el marco en sí hay manera de predecir lo que quiere formato de registro, Archivar registros manera. Estos lugares necesitan un mecanismo de extensión, lo que permite a los usuarios configurar su propia cuenta, para expandir.

 

Para extendido a la aplicación, hay dos maneras, uno se basa en la interfaz extendida, la ampliada se basa en los datos de configuración.

 

interfaz de ampliación Basado

 

Basado en la interfaz extendida es el uso de mecanismo de polimorfismo orientado a objetos, un interfaz (o métodos abstractos) en el marco para definir las plantillas de interfaz y procesamiento, entonces el usuario para lograr su costumbre. El principio es como se muestra a continuación:


 

Este uso está ampliamente extendido manera en el marco de la ApplicationListener primavera por ejemplo, el usuario puede conseguir este tratamiento especial después de que el contenedor de inicialización hacer oyente. Otro ejemplo de logback AppenderBase, los usuarios pueden personalizar las demandas appender (para enviar la cola de mensajes de usuarios) por AppenderBase herencia.

 

Cola como un marco, por lo que la escalabilidad es inevitable, por ejemplo, tenemos una ExceptionHandlerI, en el marco proporcionamos una implementación por defecto, de la siguiente manera:

 

 

 

Sin embargo, no todo el mundo está dispuesto a aplicar esta disposición, se ofrecimiento, cuando el usuario proporciona cuando su realización ExceptionHandlerI de prioridad que implementar usuario si no se proporciona el usuario, la aplicación por defecto:

 

 

 

Sobre la base de la configuración de datos extendida

 

Sobre la base de los datos de configuración extendida, para ponerse de acuerdo en un primer formato de datos, y luego mediante el uso de los datos suministrados por el usuario, montado en una instancia de objeto, los datos proporcionados por el usuario es (a veces pueden estar basados, por ejemplo slfj en StaticLoggerBinder) los atributos de los objetos, El principio es como se muestra a continuación:


 

Nos KV dispuesta generalmente utilizado en la aplicación son de esta forma, utilizando el marco son muchos escenarios, como por ejemplo la configuración anterior formato de registro logback mencionado, log logback.xml tamaño.

 

En COLA, hemos ampliado por puntos de anotación dispuestos @Extension (bizId = "tmall", USECASE = "PlaceOrder", escenario = "88vip"), se basa en una típica datos de configuración prolongados.

 

Cómo utilizar el COLA 2.0

 

fuente

 

COLA 2,0 código fuente https://github.com/alibaba/COLA

 

la generación de aplicación de COLA

 

COLA 2.0 proporciona dos conjuntos de Arquetipo, a las aplicaciones de back-end puros, la otra aplicación Web back-end, la diferencia entre ellos es la aplicación web de aplicaciones back-end más de un módulo controlador de back-end puro, el otro son los mismos. Arquetipo bibliotecas de dos partidos que he subido a Maven Repo, la aplicación de COLA pueden ser generados por el comando siguiente:

 

Generación de aplicación back-end puro (sin Controller)

 

 

mvnarchetype:generate -DgroupId=com.alibaba.demo -DartifactId=demo -Dversion=1.0.0-SNAPSHOT-Dpackage=com.alibaba.demo-DarchetypeArtifactId=cola-framework-archetype-service-DarchetypeGroupId=com.alibaba.cola -DarchetypeVersion=2.1.0-SNAPSHOT

 

La generación de aplicaciones Web de back-end (no Controller)

 

 

mvn archetype:generate  -DgroupId=com.alibaba.demo -DartifactId=demo-Dversion=1.0.0-SNAPSHOT -Dpackage=com.alibaba.demo-DarchetypeArtifactId=cola-framework-archetype-web-DarchetypeGroupId=com.alibaba.cola -DarchetypeVersion=2.1.0-SNAPSHOT

 

Suponemos que la nueva aplicación llamada de demostración, a continuación, después de ejecutar el comando, consulte la siguiente estructura del módulo, la aplicación es parte del esqueleto, la parte inferior del bastidor es un COLA.


 

En la aplicación que tiene un código de demostración generada puede ser probado directamente utilizando "prueba mvn". Si las aplicaciones Web de back-end que se pueden ejecutar contenedor TestApplication inicio de primavera de arranque y, a continuación, directamente a través de la URL REST http: // localhost :? 8080 / nombre del cliente de acceso = Alibaba servicios.

 

COLA 2,0 arquitectura general

 

Por último, de acuerdo con las viejas reglas, oa dos visión global de la arquitectura. De manera que pueda comprender la situación general de la COLA.

 

Nota: La cola tiene dos significados, uno de los significados como marco COLA, principalmente algunas aplicaciones necesarias para apoyar un común montaje. Otro significado se refiere arquitectura COLA refiere al arquetipo COLA generada por el marco esqueleto de la aplicación. La arquitectura aquí es la vista de vista de la arquitectura de aplicaciones.

 

vista dependiente

 

 

Llame a la vista

 

 

referencias:

【1】

https://softwareengineering.stackexchange.com/questions/178927/is-there-a-difference-between-a-component-and-a-module?spm=ata.13261165.0.0.12296659zlPIXl

Artículo de: Ali Tecnología

Publicados 277 artículos originales · ganado elogios 65 · vistas 380 000 +

Supongo que te gusta

Origin blog.csdn.net/ailiandeziwei/article/details/104430495
Recomendado
Clasificación