Puede hablar mucho sobre arquitectura de aplicaciones, SOLID, principios de OOP, patrones arquitect贸nicos como capas o cebolla, etc. Patrones de dise帽o. A lo largo de mi experiencia, me di cuenta de una cosa cu谩ntas personas tienen tantas opiniones. Cuando eres un programador principiante, tienes muchas ambiciones, creces un poco en la calificaci贸n, tienes la sensaci贸n de que lo sabes todo y todo lo que se te ha hecho es "malo", y definitivamente lo har谩s mejor ... Pero los a帽os pasan y la experiencia adquirida sugiere lo contrario. Debajo del corte, intentar茅 brevemente, y lo m谩s importante, en palabras simples, contarle lo buena que es la arquitectura. Al menos expandible y compatible, para m谩s detalles, pido un gato ...
En primer lugar, para crear una buena arquitectura del proyecto, debe decidir sobre sus caracter铆sticas:
- La arquitectura debe ser compatible.
- Sistema de extensibilidad sin muletas.
- Flexibilidad de la configuraci贸n, muchas tareas deben resolverse sin cambiar el c贸digo del programa.
- Fiabilidad de la arquitectura.
El primer punto es que la facilidad de soporte se resuelve siguiendo los principios de SOLID, b谩sicamente, por supuesto, el principio de "Unicidad de responsabilidad", por lo que debe elegir una arquitectura basada en microservicios o una arquitectura modular de un sistema central monol铆tico. No hay una diferencia fundamental entre estos enfoques. Para el proyecto en el que estoy trabajando, eleg铆 el segundo enfoque, m贸dulos.
El segundo punto se puede resolver utilizando el patr贸n de programaci贸n de observador de eventos o despachador. Son similares entre s铆, por lo que no nos centraremos en esto. La esencia de su trabajo es arrojar alg煤n mensaje del m贸dulo que se est谩 ejecutando actualmente y, si es necesario, escuchar el m贸dulo que necesita trabajar con este objeto.
El tercer p谩rrafo tambi茅n se resuelve de manera bastante simple, la parte descriptiva de la entidad, es decir, los atributos de las entidades almacenadas por separado de la entidad misma. Esta es una referencia a EAV (Entity Attribute Value). No es necesario que procese todos los campos de una entidad para la l贸gica de negocios, algunos atributos tienen una carga informativa, otros se usan para ordenar y filtrar, y solo una parte para construir la l贸gica de negocios. Por lo tanto, si la entidad se almacena como EAV, en cualquier momento podemos agregar o eliminar un atributo que no necesitamos.
El cuarto punto de nuestros requisitos es la fiabilidad, lo que significa un m铆nimo de "muletas" y m谩s automatizaci贸n. La mayor铆a de las aplicaciones web consisten en interfaces de visualizaci贸n de datos, tablas, filtros, clasificaci贸n, tarjetas de entidad. Y interfaces de entrada de datos, formularios. Por lo tanto, vale la pena usar f谩bricas para formularios, f谩bricas para mesas, f谩bricas para tarjetas. M谩s automatizaci贸n, al final podemos abstraernos del campo de presentaci贸n y centrarnos en la l贸gica empresarial y las tareas sustantivas ...
Y as铆, la conclusi贸n sugiere que para construir una buena arquitectura, es necesario abstraer, decidir sobre tecnolog铆as y patrones de programaci贸n y construir una base para comenzar el desarrollo ...
Ahora hemos desarrollado un plan, decidido sobre los requisitos, luego tenemos que decidir c贸mo construir la arquitectura. De hecho, no entiendo todas estas arquitecturas en capas o cebollas. Tom茅 algo de ellos e invent茅 algo yo mismo, y no veo nada en 茅l si la gente solo entiende lo que significa. De hecho, toda la arquitectura se reduce a simples pasos:
- La base es la abstracci贸n (clases abstractas e interfaces que definen el contrato de varios componentes del sistema combinados en m贸dulos)
- A continuaci贸n, tengo una capa de kernel que ejecuta los m贸dulos y los administra.
- Cargando el sistema de dise帽o
- Despu茅s de iniciar el m贸dulo, cada m贸dulo como un microservicio separado
Pero, 驴qu茅 hace que la arquitectura sea buena? La pregunta no es simple, pero si todo se simplifica al nivel del razonamiento filos贸fico, entonces esta pregunta ser谩 respondida. Despu茅s de que comience la aplicaci贸n. Disponemos de piezas aisladas, m贸dulos. Cada m贸dulo es responsable de una sola funcionalidad del sistema. Bajamos a cada m贸dulo, dise帽ado como una aplicaci贸n mvc y tenemos una vista, controlador, modelo. Y cada parte del m贸dulo tambi茅n es responsable de cada una de sus acciones. Bajamos a煤n m谩s y veremos que la vista tambi茅n tiene ciertas partes, estas son clases de f谩brica y extensiones de dise帽o. De hecho, los dise帽os tambi茅n son un m贸dulo, se carga en primer lugar, todos los dem谩s m贸dulos lo complementan y crean una interfaz (o sistema de salida). Pero, 驴c贸mo haces que todo esto sea menos dependiente? Y la respuesta ser谩 obvia para los observadores, para cada render del bloque de dise帽o que arrojan de su evento, solo necesita escuchar este evento, observar en su aplicaci贸n y agregar la actualizaci贸n de bloque necesaria en las capas, y obtener la salida adecuada. Muchos m贸dulos tambi茅n tienen sus propios eventos, a los que otros m贸dulos se suscriben y pueden agregar / o actualizar datos en el conjunto transferido. Todo esto lleva al hecho de que en la aplicaci贸n, los m贸dulos est谩n poco conectados entre s铆 y pueden vivir el uno sin el otro.
A la luz de lo anterior, surge una pregunta razonable: si un m贸dulo escucha a otro, entonces es necesario tener alg煤n tipo de sistema de gesti贸n de dependencia para estos m贸dulos. Es decir, el m贸dulo del que depende otro m贸dulo, debemos comenzar en primer lugar, y el que depende, debemos ejecutar despu茅s. Y as铆 naci贸 una implementaci贸n simple de la dependencia, creamos una cola para iniciar los m贸dulos y simplemente los clasificamos de tal manera que los m贸dulos de los que dependen los dem谩s se carguen primero, despu茅s de cargar el n煤cleo, por supuesto.
En conclusi贸n, puedo decir lo siguiente. La buena arquitectura no es una tarea tan dif铆cil y a largo plazo para ahorrar en ella. Y al final, ayuda a gastar recursos y tiempo de manera m谩s eficiente. Despu茅s de todo, cambiar la configuraci贸n en el panel de control es un asunto de cinco minutos. Escribir dos l铆neas para sumar tampoco es mucho tiempo. Pero llegar a una conclusi贸n, revertir cada uno, depurar grandes cantidades de datos ya es un tiempo que es mucho m谩s largo que el tiempo para desarrollar una estrategia de construcci贸n de arquitectura.