Mostrando las entradas con la etiqueta #Repository. Mostrar todas las entradas
Mostrando las entradas con la etiqueta #Repository. Mostrar todas las entradas

lunes, 2 de abril de 2018

Some of the most used and most common design patterns.

 

Here’s a list of the most used and most common design patterns, categorized by their type and popularity in software development:


1. Creational Patterns

Focus on object creation mechanisms, providing flexibility and efficiency.

  1. Singleton

    • Ensures a class has only one instance and provides a global point of access to it.

    • Commonly used for logging, configuration, and managing shared resources.

  2. Factory Method

    • Defines an interface for creating objects but lets subclasses decide which class to instantiate.

    • Commonly used in frameworks for creating objects without specifying exact classes.

  3. Abstract Factory

    • Provides an interface to create families of related or dependent objects without specifying their concrete classes.

    • Used in GUI libraries (e.g., different themes for UI components).

  4. Builder

    • Constructs complex objects step-by-step, separating the construction from representation.

    • Useful for creating immutable objects like StringBuilder or for object hierarchies.

  5. Prototype

    • Creates new objects by cloning an existing object (prototypes).

    • Used when object creation is costly, e.g., in game engines or document editors. 


       


2. Structural Patterns

Deal with composing classes or objects into larger structures while keeping them flexible and efficient.

  1. Adapter

    • Allows incompatible interfaces to work together by translating one interface to another.

    • Commonly used in legacy system integrations.

  2. Decorator

    • Adds functionality to an object dynamically without altering its structure.

    • Common in user interface components (e.g., adding scrollbars or borders).

  3. Facade

    • Provides a simplified interface to a complex subsystem.

    • Often used in APIs and libraries to hide implementation details.

  4. Composite

    • Composes objects into tree structures to represent part-whole hierarchies.

    • Frequently used in GUIs and file system representations.

  5. Proxy

    • Provides a surrogate or placeholder for another object to control access to it.

    • Used for lazy initialization, access control, and logging.

  6. Bridge

    • Decouples an abstraction from its implementation so that both can vary independently.

    • Common in graphical rendering libraries.

  7. Flyweight

    • Reduces memory usage by sharing as much data as possible with similar objects.

    • Used in caching mechanisms or text editors for character storage.


3. Behavioral Patterns

Concerned with the communication and interaction between objects.

  1. Strategy

    • Encapsulates algorithms and allows them to be interchangeable at runtime.

    • Common in payment processing systems and sorting algorithms.

  2. Observer

    • Defines a dependency between objects so that when one changes state, its dependents are notified.

    • Commonly used in event-driven programming and GUIs.

  3. Command

    • Encapsulates a request as an object, allowing parameterization and queuing of requests.

    • Used in undo/redo systems and job scheduling.

  4. State

    • Allows an object to change its behavior when its state changes.

    • Frequently used in workflows or state machines.

  5. Template Method

    • Defines the skeleton of an algorithm in a base class, allowing subclasses to override specific steps.

    • Common in frameworks and libraries.

  6. Chain of Responsibility

    • Passes a request along a chain of handlers until it is handled.

    • Used in logging systems or middleware pipelines.

  7. Mediator

    • Centralizes communication between objects to reduce dependencies.

    • Common in chat applications or GUIs.

  8. Iterator

    • Provides a way to access elements of a collection sequentially without exposing its underlying structure.

    • Used in collections and data structures.

  9. Visitor

    • Adds new operations to objects without modifying their classes.

    • Used in compilers or processing hierarchical structures.

  10. Memento

    • Captures an object’s state to restore it later.

    • Commonly used in undo functionality.


Additional Modern Patterns

Beyond the classical Gang of Four patterns, these modern patterns are also widely used:

  1. Dependency Injection (DI)

    • Provides dependencies to objects from an external source, improving modularity.

    • A cornerstone of frameworks like Spring or .NET Core.

  2. Model-View-Controller (MVC)

    • Separates an application into three components: Model (data), View (UI), and Controller (logic).

    • Dominant in web development frameworks like Ruby on Rails and ASP.NET MVC.

  3. Model-View-ViewModel (MVVM)

    • Variant of MVC, primarily used in UI frameworks like Angular or WPF.

  4. Repository

    • Abstracts access to data sources, providing a clean separation between the application and data layer.

    • Common in DDD (Domain-Driven Design).

  5. CQRS (Command Query Responsibility Segregation)

    • Separates read and write operations into different models.

    • Used in scalable architectures.

  6. Event Sourcing

    • Represents the state of an object as a sequence of events.

    • Common in microservices and systems requiring strong audit trails.


Most Used Patterns in Practice

  1. Singleton

  2. Factory Method

  3. Strategy

  4. Observer

  5. MVC/MVVM

  6. Dependency Injection

  7. Repository

  8. Adapter

  9. Decorator

  10. Command

These patterns are versatile, widely applicable, and form the backbone of most modern software systems.




domingo, 18 de septiembre de 2016

Los patrones de diseño más utilizados en el desarrollo de software

Están organizados en tres categorías principales según el libro "Design Patterns: Elements of Reusable Object-Oriented Software" (Gang of Four, GoF). A continuación, los patrones más usados dentro de cada categoría y algunos otros populares adicionales:


1. Creacionales

Estos patrones abordan la creación de objetos, asegurando que el sistema sea independiente de cómo se crean, componen y representan.

  1. Singleton

    • Garantiza que una clase tenga una única instancia y proporciona un punto de acceso global a ella.
  2. Factory Method

    • Define una interfaz para crear objetos, pero permite que las subclases decidan cuál clase instanciar.
  3. Abstract Factory

    • Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
  4. Builder

    • Separa la construcción de un objeto complejo de su representación, permitiendo que el mismo proceso de construcción cree diferentes representaciones.
  5. Prototype

    • Permite clonar objetos existentes en lugar de crearlos desde cero, evitando el costo de inicialización compleja.

2. Estructurales

Estos patrones se ocupan de cómo componer clases y objetos para formar estructuras más grandes.

  1. Adapter

    • Permite que clases con interfaces incompatibles trabajen juntas mediante un "adaptador".
  2. Decorator

    • Añade funcionalidad adicional a un objeto de forma dinámica.
  3. Proxy

    • Proporciona un sustituto o marcador de posición para controlar el acceso a un objeto.
  4. Composite

    • Compone objetos en estructuras de árbol para representar jerarquías parte-todo, permitiendo que los clientes traten objetos individuales y compuestos de manera uniforme.
  5. Bridge

    • Desacopla una abstracción de su implementación para que ambas puedan variar de manera independiente.
  6. Facade

    • Proporciona una interfaz simplificada a un conjunto de interfaces en un subsistema.
  7. Flyweight

    • Reduce el costo de creación de objetos, reutilizando instancias existentes cuando es posible.

3. Comportamentales

Estos patrones se centran en la interacción y la responsabilidad entre objetos.

  1. Strategy

    • Define una familia de algoritmos, encapsula cada uno y los hace intercambiables.
  2. Observer

    • Permite que un objeto notifique a múltiples objetos interesados cuando cambia su estado.
  3. Command

    • Encapsula una solicitud como un objeto, permitiendo parametrizar clientes con diferentes solicitudes, hacer colas o registros de comandos, y soportar deshacer/rehacer.
  4. State

    • Permite que un objeto cambie su comportamiento cuando cambia su estado interno.
  5. Template Method

    • Define el esqueleto de un algoritmo en una operación, permitiendo que las subclases redefinan ciertos pasos sin cambiar la estructura general.
  6. Mediator

    • Descentraliza la comunicación entre objetos mediante un mediador.
  7. Chain of Responsibility

    • Permite que varios objetos manejen una solicitud, pasando la solicitud a lo largo de una cadena.
  8. Iterator

    • Proporciona una manera de acceder a los elementos de un objeto compuesto de forma secuencial sin exponer su representación subyacente.
  9. Visitor

    • Permite agregar nuevas operaciones a estructuras de objetos sin modificar sus clases.
  10. Memento

    • Captura y externaliza el estado interno de un objeto para poder restaurarlo más tarde.

Patrones Adicionales y Modernos

Además de los patrones clásicos de GoF, algunos patrones más modernos son ampliamente usados en el desarrollo de software:

  1. Dependency Injection (DI)

    • Permite inyectar dependencias en lugar de que un objeto las cree por sí mismo.
  2. Model-View-Controller (MVC)

    • Desglosa una aplicación en tres componentes principales: modelo, vista y controlador.
  3. Repository

    • Abstrae la lógica para acceder a datos de una base de datos o fuente externa.
  4. Unit of Work

    • Mantiene un registro de los cambios realizados a los datos para coordinar actualizaciones atómicas.
  5. Event Sourcing

    • Representa el estado de una entidad como una secuencia de eventos en lugar de un único estado.
  6. CQRS (Command Query Responsibility Segregation)

    • Separa las operaciones de lectura (query) de las operaciones de escritura (command) en diferentes modelos.

Estos patrones forman la base de muchas soluciones de software modernas y se eligen según las necesidades del problema y el contexto de la aplicación.