Modelo C4 PDF
Document Details
Uploaded by Deleted User
2024
Luis Campoverde
Tags
Summary
This document provides an overview of the C4 model for software design, covering aspects such as context diagrams, container diagrams, component diagrams, and code diagrams. It also describes the advantages of using this model, including abstraction hierarchy and efficient communication.
Full Transcript
Modelo C4 Contexto Contenedores Componentes Código Luis Campoverde - 2024 Diagrama de Contexto Permite la visualización general del sistema. Es un diagrama de lujo de datos(DFD) de nivel superior. Permite identi icar los alcances o limites d...
Modelo C4 Contexto Contenedores Componentes Código Luis Campoverde - 2024 Diagrama de Contexto Permite la visualización general del sistema. Es un diagrama de lujo de datos(DFD) de nivel superior. Permite identi icar los alcances o limites del sistema. f f Diagrama de Contenedores Se debe especi icar cada uno de los contenedores a alto nivel, por ejemplo: Bases de datos, servicios, aplicaciones. Interacciones entre los mismos. Permite el completo entendimiento del lujo y estructura del sistema. No es se trata de un docker si no mas bien de una aplicación como tal. f f Diagrama de Contenedores Contenedores Sistemas adicionales Diagrama de Componentes Permite ampliar la forma de trabajo de un contenedor, describiendo su funcionamiento interno. No se muestra todos los contenedores, es decir para un ejemplo se visualizara uno de los contenedores con su detalle de comunicación. Diagrama de Componentes Controlador Utiliza otros componentes para el acceso a la DB. Código Diagramas de clases del código fuente que se ha desarrollado. Diagramas de paquetes. Relaciones entre las clases. Recomendación generar desde el IDE. Ventajas Modelo C4 Jerarquía de abstracción: Proporcionar una estructura clara y jerárquica de cada unos de los diagramas. Comunicación efectiva: Permite mantener una excelente luidez de la comunicación entre la parte técnica y no técnica. Enfocado en la esencia. Se centra en los aspectos claves de la arquitectura de software. Escalabilidad: Se puede aplicar a cualquier tipo de sistemas. Facilita la toma de decisiones: Permite tomar decisiones basadas en el diseño y en los cambios de arquitectura en el caso de existir. f Actividad en clase Trabajo en grupo: Grupo 1 - 2 Investigar diagramas de alto nivel - conceptos. Plantear dos ejemplos. Grupo 3 - 4 Investigar que son diagramas de bajo nivel - conceptos. Plantear dos ejemplos. Diagramas de arquitectura de alto nivel Este tipo de diagramas permite obtener un panorama general del sistema que se va a desarrollar, el cual lo podemos describir mediante el uso de los siguientes diagramas: Despliegue. Servicios. Componentes. Ejemplos Diagramas de arquitectura de bajo nivel Estos tipos de diagramas son mas especí icos en cuanto a la funcionalidad y jerarquía de la interacción de los diferentes servicios que componen la arquitectura del software. Se representan mediante los siguientes diagramas. Secuencia. Clases. Despliegue detallado. f Ejemplos Trabajo Bloque 2 En los grupos conformados, realizar el siguiente trabajo: Realizar un diseño de solución aplicando el modelo C4. Se debe aplicar los 4 conceptos y generar los diagramas pertinentes para el mismo. Entregar el dia viernes 26/01/2024 hasta las 23:59 Subir el trabajo todos los estudiantes y la entrega se debe realizar en pdf. PATRONES DE DISEÑO ESTRUCTURALES Patrones de diseño estructurales Hace referencia como esta compuesta las clases y objetos, los cuales nos permiten generar estructuras mas complejas y/o grandes. Cada uno de los patrones estructurales nos permite mejorar la lexibilidad y e iciencia del sistema, brindando crecimiento en la estructura sin afectar a la parte funcional. f f Adapter(Adaptador) Este tipo de adaptador es implementado cuando es necesario realizar una comunicación entre dos interfaces o clases que son incompatibles. Permite tener una fácil comunicación al realizar una entrada de todos X (Interfaz 1) para convertirla en una entrada de datos Y(Interfaz 2). Adapter(Adaptador) Bridge(Puente) Permite separa una abstracción de una implementación, abriendo la oportunidad de un crecimiento de manera independiente y de manera mas optima. Se extrae una de las dimensiones a una jerarquía de clases separada, de modo que las clases originales referencian un objeto de la nueva jerarquía, en lugar de tener todo su estado y sus funcionalidades dentro de una clase. Composite(Compuesto) Permite la composición de objetos en en estructuras de tipo árbol y con esas estructuras como si fueran objetos individuales. Solución, trabajar con productos y cajas a travez de una interfaz común que declara un método para calcular el precio total. El patrón Composite te permite ejecutar un comportamiento de forma recursiva sobre todos los componentes de un árbol de objetos. Un pedido puede incluir varios productos empaquetados en cajas, que a su vez están empaquetados en cajas más grandes y así sucesivamente. La estructura se asemeja a un árbol boca abajo. Decorator(Decorator) Permite agregar funcionalidades a objetos, colocando estos objetos dentro de objetos encapsulados que contienen estas funcionalidades. Proporciona una manera lexible a la herencia, para extender sus funcionalidades. f Facade(Fachada) Proporciona una interfaz simpli icada a un grupo de interfaces en un sistema. Cuando se realiza un pedido en una tienda un operador es la fachada a todos nuestros servicios y departamentos brindando una interfaz sencilla. f Flyweihgt(Peso Ligero) Permite la creación de objetos ligeros, mediante la abstracción de las partes reutilizables, que pueden ser compartidas con otros objetos, logrando reutilizar los objetos ya existentes y mejorando el rendimiento de memoria. Antes de aplicar este patrón es necesario identi icar si el sistema tiene un problema de rendimiento en memoria. f Proxy(Proxy) Controla el acceso al objeto original, permitiendo ejecutar algo antes o después de llegar la solicitud al objeto original. 1. El cliente solicita al Factory un Objeto. 2. El Factory crea un Proxy que encapsule al Object. 3. El cliente ejecuta el Proxy creado por el Factory. 4. El Proxy realiza una o varias acciones previas a la ejecución del Object. 5. El Proxy delega la ejecución al Object. 6. El Proxy realiza una o varias acciones después de la ejecución del Object. 7. El Proxy regresa un resultado. Memento(Recuerdo) Permite guardar y restaurar el estado previo de un objeto sin revelar los detalles de su implementación. 1. El Cliente aplica un cambio sobre el Originator. 2. El Originator crea un nuevo Memento que representa su estado actual. 3. El Cliente guardar el Memento en el Caretaker para posteriormente poder cambiar entre los estados del Originator. 4. Después de un tiempo, el Cliente solicita al Caretaker el estado previo del Originator. 5. El Cliente restaura el estado del Originator mediante el Memento obtenido del Caretaker. PATRONES DE DISEÑO CREACIONALES Patrones de diseño Creaciones Proporcionan varios mecanismos para la creación de objetos que incrementan la reutilización de código existente. Singleton Permite asegurar que una clase tenga una única instancia, a la vez que proporcionan un punto de acceso global a dicha instancia. 1. El cliente solicita la instancia al Singleton mediante el método estático getInstance. 2. El Singleton validará si la instancia ya fue creada anteriormente, de no haber sido creada entonces se crea una nueva. 3. Se regresa la instancia creada en el paso anterior o se regresa la instancia existente en otro caso. Singleton // La clase Base de datos define el método `obtenerInstancia` // que permite a los clientes acceder a la misma instancia de // una conexión de la base de datos a través del programa. class Database is // El campo para almacenar la instancia singleton debe // declararse estático. private static field instance: Database // El constructor del singleton siempre debe ser privado // para evitar llamadas de construcción directas con el // operador `new`. private constructor Database() is // Algún código de inicialización, como la propia // conexión al servidor de una base de datos. //... // El método estático que controla el acceso a la instancia // singleton. public static method getInstance() is if (Database.instance == null) then acquireThreadLock() and then // Garantiza que la instancia aún no se ha // inicializado por otro hilo mientras ésta ha // estado esperando el desbloqueo. if (Database.instance == null) then Database.instance = new Database() return Database.instance // Por último, cualquier singleton debe definir cierta // lógica de negocio que pueda ejecutarse en su instancia. public method query(sql) is // Por ejemplo, todas las consultas a la base de datos // de una aplicación pasan por este método. Por lo // tanto, aquí puedes colocar lógica de regularización // (throttling) o de envío a la memoria caché. // … class Application is method main() is Database foo = Database.getInstance() foo.query("SELECT...") //... Database bar = Database.getInstance() bar.query("SELECT...") // La variable `bar` contendrá el mismo objeto que la // variable `foo`. Factory Method(Método de Fábrica) De ine una interfaz para crear un objeto, pero deja que las subclases alteren el tipo de objeto a crear. Es de suma importancia cuando una clase no puede anticipar el tipo de objetos que debe crear. El cliente le solicita al ConcreteFactory la creación del ProductA. El ConcreteFactory localiza la implementación concreta de ProductA y crea una nueva instancia. El ConcreteFactory regresa el ConcreteProductA creado. El cliente le solicita al ConcreteFactory la creación del ProductB. El ConcreteFactory localiza la implementación concreta del ProductB y crea una nueva instancia. El ConcreteFactory regresa el ConcreteProductB creado. f Abstract Factory(Fábrica Abstracta) Permite la creación de familias de objetos relacionados, sin especi icar sus clases concretas. Útil cuando se necesita garantizar que los objetos creados sean compatibles entre sí. 1. El cliente solicita la creación del ConcreteFactory1 al AbstractFactory. 2. El AbstractFactory crea una instancia del ConcreteFactory1 y la regresa. 3. El cliente le solicita al ConcreteFactory1 la creación de un ProductA. 4. El ConcreteFactory1 crea una instancia del ProductA1 el cual es parte de la familia1 y lo regresa. 5. El cliente esta vez solicita la creación del ConcreteFactory2 al AbstractFactory. 6. El AbstractFactory crea una instancia del ConcreteFactory2. 7. El cliente le solicita al ConcreteFactory2 la creación de un ProductA. 8. El ConcreteFactory2 crea una instancia del ProductA2 el cual es parte de la familia2 y lo regresa. f Builder(Constructor) Permite separa la construcción de un objeto complejo en su representación, de manera que el mismo proceso de construcción pueda crear diferentes representaciones. 1. El cliente crea una instancia del ObjectBuilder. 2. El cliente ejecuta el paso 1 de la creación en el ObjectBuilder. 3. Internamente el ObjectBuilder crea al TargetObject. 4. El cliente ejecuta el paso 2 de la creación en el ObjectBuilder. 5. Internamente el ObjectBuileder crea un OtherObjectA. 6. El cliente ejecuta el paso 3 de la creación en el ObjectBuilder. 7. Internamente el ObjectBuilder crear el OtherObjectB. 8. El cliente solicita al ObjectBuilder la creación del TargetObject, éste toma todos los objetos creados anteriormente, los asocia al TargetObject y lo regresa. Prototype(Prototipo) Nos permite la creación de nuevos objetos, pero partiendo de un prototipo. PATRONES DE DISEÑO COMPORTAMIENTO Chain of responsibility(Cadena de responsabilidad) Comand(Comando) Iterator(Iterador) Mediator(Mediador) Memento(Recuerdo) Observer(Observador) State(Estado) Strategy(Estrategia) Témplela Method(Método Plantilla) Visitor(Visitante) Actividad en clase En los grupos conformador, investigar sobre los patrones asignados en clases y presentar un ejemplo de cada patrón con su debida explicación.