Seleccionar página
Arquitecturas limpias y DDD, un recorrido práctico. Parte 2

Arquitecturas limpias y DDD, un recorrido práctico. Parte 2

Arquitecturas limpias y DDD, un recorrido práctico. Parte 2

Arquitectura | DDD | Desarrollo

En el anterior post de esta serie sobre arquitecturas limpias y DDD, se introdujeron los conceptos básicos sobre dicha arquitectura y se discutió sobre la filosofía de diseño separada en capas, sus elementos y características fundamentales y por supuesto sobre las ventajas de su uso.

Llegados a este punto, cabe preguntarse cómo pasar a la acción. Dicho de otro modo, planteado un problema funcional o un caso de uso a implementar, ¿cómo aplicar DDD? A lo largo de este y de los siguientes posts de la serie, se tratarán los siguientes puntos al respecto:

  • Planteamiento de un problema funcional real.
  • Aplicación y uso de lenguaje ubicuo.
  • Diseño estratégico de la solución.
  • Diseño táctico e implementación.
Diagrama de arquitectura hexagonal

Problema: control de operaciones en manufactura

Tomemos como ejemplo un problema de digitalización característico de una empresa manufacturera y su flujo de producción, donde los operarios deben realizar ciertas tareas para acabar una orden de trabajo que, en última instancia, permite fabricar un producto.

La forma de trabajo habitual de los operarios es la siguiente:

  • De cada orden de trabajo que les facilitan, toman una o varias de las operaciones que deben realizar, según sus conocimientos y certificaciones, y comienzan a trabajar en ellas.
  • Marcan la tarea como asignada al operario y en progreso, para que nadie la tome de nuevo.
  • Una vez acabada la tarea, la marcan como finalizada y vuelven al principio del proceso.

Cabe destacar, como restricción, que las operaciones sólo pueden encontrarse en un estado a la vez, es decir, o están por hacer, o están en proceso o están finalizadas. De manera resumida, su flujo es el siguiente:

Flujo simple de gestión de operaciones

¡Veamos como podemos implementar este problema!

Nuestro aliado el lenguaje ubicuo. Conceptos de negocio

The use of language on a project is subtle but all-important […] to create a supple, knowledge-rich design calls for a versatile, shared team language, and a lively experimentation with language that seldom happens on software projects.

 

Eric Evans – Domain-driven design. pp.23 – 24.

Una de las partes más importantes de DDD es el lenguaje. De las sesiones del equipo (equipo de desarrollo y expertos del dominio, se entiende) debe emerger un lenguaje consensuado entre todos que explique el modelo de forma unívoca. Para ello, hay que prestar especial atención a lo que nos comunican los propios expertos del dominio.

Para este ejemplo en particular, tomaremos la explicación anterior como la información que tenemos del dominio (imaginemos que ha sido un experto quien nos la ha facilitado) y extraeremos, de manera somera, los conceptos y entidades más importantes:

  • Operario. Usuario técnico que ejecuta las operaciones. Cada operario tiene habilidades (skills) que les permitirá o no ejecutar una operación.
  • Orden. Una orden de trabajo es el conjunto de operaciones que uno o varios operarios deben llevar a cabo para producir un bien o servicio, dado unos recursos consumibles.
  • Operación. Las operaciones son la unidad mínima de trabajo que un operario debe ejecutar para conseguir acabar una orden de trabajo. Todas las operaciones pertenecen a una orden concreta, deben ejecutarse por operarios con los skills necesarios y son cambiadas de estado durante el flujo de trabajo del operario. Pueden encontrarse en 3 estados diferentes: TODO, DOING y DONE.

Diseño estratégico: la hora de la verdad

Durante la etapa de diseño estratégico el equipo de desarrollo, junto con los expertos del dominio, deben definir los bounded contexts, el lenguaje ubicuo y los context maps que expliquen el dominio del problema.

Para ello es recomendable seguir, entre otras, la técnica de Event Storming. Con esta técnica podemos definir qué comportamiento existe en nuestro dominio, qué elementos intervienen y cómo se relacionan entre ellos. Toda esta información posteriormente ayudará a determinar los building blocks de nuestro proyecto software.

Continuando con el ejemplo planteado, en la imagen siguiente se puede ver un modelado de cambio de estado de operaciones.

Diagrama de flujo completo del sistema de operaciones

De esta imagen y su análisis, y siguiendo la nomenclatura de Event Storming, se puede obtener suficiente información del dominio como para realizar una primera implementación. Pero eso lo dejaremos para el siguiente post.

En el próximo capítulo de esta serie, se llevará a cabo el diseño táctico y la implementación de la solución.

¿Quieres dar el primer paso en digitalización? Llámanos sin compromiso y diseñamos tu Mínimo Producto Viable

Arquitecturas limpias y DDD, un recorrido práctico. Parte 1

Arquitecturas limpias y DDD, un recorrido práctico. Parte 1

Arquitecturas limpias y DDD, un recorrido práctico. Parte 1

Arquitectura | DDD | Desarrollo

Cuando se aborda un nuevo proyecto de software en el que intervienen múltiples stakeholders, se implican diversos componentes o sistemas terceros, o trata de implementar grandes flujos de negocio, es decir, un proyecto con un alto nivel de complejidad, se afronta el mismo problema de siempre: ¿Qué estrategia de diseño tomar? ¿Qué lenguaje de negocio utilizar? ¿Qué patrones de arquitectura tecnológica aplicar?

Las respuestas a estas preguntas deben basarse siempre en el análisis de aspectos tales como la mantenibilidad que se requiere, el nivel de integración, la escalabilidad o simple y llanamente el coste de implementación. No obstante, entre estos aspectos suele olvidarse uno clave: el lenguaje, que no es otra cosa que el mecanismo o punto de unión que debe permitir la conexión entre el mundo del negocio empresarial a digitalizar y el producto digital final. En otras palabras, el aspecto que marcará el éxito.

¿En qué punto entra en juego el concepto de arquitecturas limpias y DDD (Domain-Driven Design)? ¿En qué ayuda a trabajar y optimizar ese aspecto clave? Para empezar, en este artículo se abordarán conceptos básicos de arquitectura.

Arquitecturas limpias y el hexágono mágico

La arquitectura hexagonal se basa en los siguientes principios y objetivos fundamentales:

  • Separar de forma explícita y contundente las capas de usuario, negocio y servidor.
  • Derivar y empujar las dependencias desde las capas de usuario y servidor hacia la lógica de negocio.
  • Aislar e independizar al máximo cada una de las capas, suprimiendo acoplamientos indebidos y dotando a cada componente de una responsabilidad muy específica.
Diagrama de arquitectura hexagonal

Desde un punto de vista práctico, este principio de arquitectura se basa en una idea tan antigua como eficaz: divide y vencerás. Separar o partir el problema en trozos independientes facilitará no sólo la comprensión del problema global, sino que hara más sencilla la implementación de la solución y su posterior mantenimiento. Por otro lado, prepara el terreno para alcanzar una mayor extensibilidad y escalabilidad.

¿Te interesa profundizar aún más en este principio de arquitectura? Este artículo te será de gran ayuda. Exploremos de forma breve y concisa cada uno de los componentes principales de la arquitectura hexagonal.

Capa de presentación

Es sencillamente la interfaz de usuario final. A grandes rasgos, se encarga de mostrar la información al usuario, interpretar sus órdenes y desencadenar las acciones de negocio pertinentes a través de su comunicación al resto de capas intervinientes.

Cabe destacar en este punto que, en ocasiones y con mucha asiduidad, se identifica al usuario o actor externo con un ser humano. Nada más lejos de la realidad. El usuario final puede ser cualquier otra entidad: una máquina, un dispositivo IoT, otro sistema informático, etc. Es un punto a tener muy en cuenta de cara al diseño de esta capa.

Capa de aplicación

Define las tareas que debe realizar el software y dirige los objetos de dominio expresivo para resolver los problemas. Las tareas de las que se encarga esta capa son significativas para el negocio o necesarias para la interacción con las capas de aplicación de otros sistemas.

Esta capa se mantiene «delgada». No contiene reglas de negocio o conocimiento, sino que sólo coordina las tareas y delega el trabajo a las colaboraciones de los objetos de dominio en la capa siguiente. No tiene estado que refleje la situación del negocio, pero puede tener estado que refleje el progreso de una tarea para el usuario o el programa.

Capa de dominio

O también llamada capa de modelo. Es el componente de la arquitectura responsable de representar los conceptos del negocio, la información sobre la situación del negocio y las reglas del negocio. El estado que refleja la situación de la empresa a través de su sistema digital se controla y utiliza aquí, aunque los detalles técnicos de su almacenamiento se delegan en la infraestructura.

En definitiva, es el componente que implementa los flujos de trabajo o producción de la compañía a través de un lenguaje muy próximo al empresarial.

Capa de infraestructura

Esta capa proporciona las capacidades técnicas genéricas que soportan las capas superiores: envío de mensajes para la aplicación, persistencia para el dominio, dibujo de widgets para la UI, etc. Asimismo, es la responsable de la conexión con los sistemas/agentes externos a nuestro dominio.

La capa de infraestructura también puede soportar el patrón de interacciones entre las cuatro capas a través de un marco arquitectónico y es también llamada capa de anticorrupción en cuanto a que evita que las capas de negocio se «contaminen» con elementos en realidad ajenos a éste.

¿Quieres más información? Echa un vistazo a esta entrada.

En el próximo capítulo de esta serie, se planteará un problema real y el diseño de la solución aplicando éste y otros principios.

¿Quieres dar el primer paso en digitalización? Llámanos sin compromiso y diseñamos tu Mínimo Producto Viable

Trazabilidad y aseguramiento de la calidad con Deep Learning

Trazabilidad y aseguramiento de la calidad con Deep Learning

Trazabilidad y aseguramiento de la calidad con Deep Learning

Big Data | Deep Learning | Smart Factory

El aseguramiento de la trazabilidad o la calidad de los productos es uno de los objetivos más importantes y a veces más complicados de acometer durante el proceso de producción de cualquier compañía.

Desde el punto de vista del análisis de datos, trazar el origen de un producto o determinar su calidad puede expresarse como el grado de similitud que una observación, un producto en este caso, tiene con un grupo de observaciones. En otras palabras, se puede describir el problema como la identificación de patrones en el conjunto de datos y posteriormente la predicción de pertenencia a los conjuntos de las nuevas observaciones.

Deep Learning y un problema de patrones

En los últimos años, multitud de estudios han demostrado que las técnicas de Deep Learning son herramientas poderosas para dar solución al problema del reconocimiento de patrones. Más allá, en este caso de estudio tratemos de contestar a la siguiente pregunta: ¿cómo podríamos aportar una solución a este problema desde el campo de la inteligencia artificial? Como aperitivo, una hoja de ruta central:

  1. Integración de las distintas fuentes de datos relacionadas con el proceso de producción en cuestión.
  2. Generación de información relevante para la toma de decisiones mediante la aplicación de técnicas de inteligencia artificial basadas en tus datos.
  3. Desarrollo de herramientas basadas en inteligencia artificial que asistan en la toma de decisiones en tiempo real.
Las técnicas de deep learning son herramientas poderosas para dar solución al problema del reconocimiento de patrones

Recolecta tus datos de producción

Antes de comenzar, supongamos que una empresa dedicada a la manufactura necesita trazar sus productos o estudiar su calidad. Esta compañía genera una gran cantidad de datos durante la actividad de su proceso de producción y estos datos se encuentran dispersos por toda la organización en distintos sistemas como: ERP, CMS, sistemas IoT, etc.

¿Cómo lo podríamos solucionar? La primera acción que hay que abordar es la extracción, tratamiento y almacenamiento de los datos (ETL en inglés), ya que los datos, por sí solos, no constituyen una fuente de información, sino que es necesario procesarlos para que sean de valor para el desarrollo del negocio. De esta forma, la depuración y correcta estructuración de los datos nos aportará un mayor beneficio en el momento de su análisis y comprensión de la información.

Convierte tus datos en información con Deep Learning

Una vez que los datos han sido procesados y almacenados, ¿cómo obtenemos información de ellos? Las Deep Neural Network (DNN) son una de las mejores herramientas que tenemos para la identificación de patrones sobre conjuntos de datos de gran volumen. Por lo que ahora es el momento de que planteemos una estrategia con la que obtengamos información relevante que nos sirva para tomar decisiones.

Para entrenar una DNN enfocada en el reconocimiento de patrones necesitamos añadir algunas capas que hagan los datos más manejables. En primer lugar podemos construir una capa de generación de embeddings. Esta capa permitiría a la red neuronal transformar vectores de datos de gran tamaño en vectores de dimensiones mucho más bajas codificando el significado de la entrada y generando similitudes semánticas entre vectores con datos similares, lo que haría más fácil el proceso de aprendizaje de la red neuronal.

La siguiente capa por donde pasarían los datos es la extracción de características. Esta es una capa fundamental en las técnicas de deep learning, ya que descubre las características comunes que describen los distintos clústeres o patrones a los que pertenecen los datos.

Y para finalizar, conectaríamos nuestra DNN, de modo que se encargue de aprender a clasificar las distintas observaciones en cada uno de los patrones, obteniendo así la información relevante que estábamos buscando y que describe el comportamiento de nuestros datos.

Convierte tus datos en información con Deep Learning

Intégralo con tu sistema

Sólo falta un paso más. Para convertir la información en conocimiento es necesario que los expertos del sector la completen con su experiencia. Para ello, tenemos que integrar las herramientas de inteligencia artificial con los demás sistemas que intervienen en el proceso de producción.

Las integraciones van desde paneles de control, widgets de información en ERPs y/o CMSs, hasta aplicaciones móviles y web dedicadas. Independientemente de la implementación, hay que tener en cuenta que este es el paso fundamental que permite proporcionar a los expertos en tiempo real la información que les ayude a mejorar los procesos de negocio.

¿Quieres mejorar tus procesos a través de modelos de inteligencia artificial?

Conectores personalizados Power BI, un modo profesional de analítica empresarial

Conectores personalizados Power BI, un modo profesional de analítica empresarial

Conectores personalizados Power BI, un modo profesional de analítica empresarial

Analítica | Datos | Power BI

A estas alturas, (casi) todo el mundo conoce Power BI. Su flujo de funcionamiento a alto nivel es sencillo: conexión contra un origen de datos soportado; carga de los datos extraídos sobre la plataforma Power BI; y transformación y manipulación de los datos cargados para la obtención de información. Y es precisamente en su capacidad de conexión con múltiples orígenes de datos donde reside una de las grandes fortalezas de la herramienta.

Con mayor o menor pericia, la mayoría de analistas o responsables de negocio alguna vez han conectado como origen una hoja Excel, han cargado sus datos y han jugado con ellos para construir informes, gráficos y pequeños cuadros de mando. ¿Dispones de bases de datos MySQL Server? ¿Quizás Microsoft Access? ¿Incluso PDFs? Power BI ofrece de manera nativa conectores para extraer y consumir sus datos en pocos clicks

Pero… ¿qué ocurre si nuestro origen de datos (un sistema corporativo interno, un ERP o cualquier otra aplicación implantada en nuestro negocio) no está soportado por Power BI? Keep Calm & Custom Connectors. Conectores Power BI para analítica profesional a tu alcance.

Power BI proporciona multitud de conectores contra distintas fuentes de datos

Conectores personalizados Power BI, una estrategia

La implementación de Custom Connectors sobre Power BI se lleva a cabo a través de la SDK Power Query, un motor de preparación y transformación de datos. No obstante, más allá de conocimientos sobre el lenguaje de programación, el desarrollo de un conector personalizado requiere de una estrategia que fije los objetivos que se desean alcanzar. Los pasos de dicha estrategia bien pueden ser los siguientes:

  1. Determinar qué origen de datos queremos integrar y, sobre todo, qué datos se quieren obtener de él y a qué necesidad de análisis responden.
  2. Estudiar los posibles modos de comunicación o APIs de los que dispone el origen de datos que queremos integrar.
  3. Analizar el modo de autenticación requerido contra el origen de datos, lo que determinará el nivel de seguridad y conectividad con éste.
  4. Especificar los parámetros que el usuario deberá introducir para recuperar los datos que desee en base a la interfaz de comunicación ofrecida por el origen de datos.
  5. Analizar la estructura de los datos devueltos por la interfaz de comunicación del origen de datos con el fin de estructurarlos adecuadamente para su carga final en Power BI.
  6. Diseñar las transformaciones previas que se han de llevar a cabo para ofrecer al usuario final un conjunto de datos adecuado a su perfil y necesidades.

Una vez marcada la estrategia, ¡manos a la obra!

Conectores Power BI para analítica de datos ¿Necesitas uno para tus sistemas?

La autenticación, un asunto vital

A la hora de implementar un conector personalizado, la autenticación es sin duda uno de los puntos centrales y más relevantes. Determinará, por un lado, de qué forma el conector deberá interactuar con el origen para la obtención de datos. Por otro lado, condicionará qué información y credenciales deberá proporcionar el usuario final y, por ende, de qué permisos de acceso a los datos obtenidos dispondrá.

Como es de suponer, el mecanismo de autenticación a implementar dependerá del origen de datos sobre el cual se quiere llevar a cabo la conexión. Afortunadamente, Power Query pone a disposición del desarrollador múltiples posibilidades, entre las que destacan la autenticación básica con usuario y contraseña y la autenticación vía OAuth2.0. De esta forma, se cubre un amplísimo rango de sistemas y aplicaciones.

Power BI mecanismos de autenticación básicos y OAuth2.0.

En el caso de implementar autenticación básica, Power BI solicitará al usuario sus credenciales de acceso a la plataforma origen para obtener los datos requeridos. En el caso de optar por autenticación OAuth, habrán de implementarse los métodos oportunos en base a la interfaz dispuesta por dicha plataforma origen.

Más fácil con transformaciones y árboles de navegación

Más allá de la autenticación, el otro punto clave a la hora de implementar un conector personalizado es el tratamiento previo sobre los datos extraídos del sistema origen que se ha de realizar para su carga final en Power BI. Este punto vendrá determinado tanto por el formato de los datos retornados por el sistema origen como por la necesidad y perfil del usuario final.

Power Query, a través de su lenguaje de fórmulas M, permite llevar a cabo transformaciones, combinaciones o filtrados de datos que, aplicados en el ámbito del conector personalizado, ofrecen al usuario los datos «precocinados».

No obstante, más allá de dicho procesamiento, Power Query aporta también los denominados árboles de navegación, que facilitan de forma extraordinaria al usuario final la visualización y elección de los conjuntos de datos que desee integrar en Power BI para su tratamiento.

Tabla de navegación Power BI para conjuntos de datos

A modo de conclusión, Power BI aporta mecanismos de extensión suficientes para la integración en los flujos de analítica empresarial de datos procedentes de cualquier sistema o plataforma interna o corporativa, permitiendo así crear un único Data Center personalizado y en tiempo real.