rmn regla protones multiplicidad khan academy dependency-injection inversion-of-control loose-coupling

dependency-injection - protones - regla n 1 rmn



¿Qué patrones de acoplamiento libre usa más? (13)

Últimamente he visto muchas publicaciones en blogs sobre cómo crear aplicaciones débilmente acopladas. ¿Qué patrones usa más al crear aplicaciones poco acopladas? ¿Inyección de dependencia? ¿Inversión de control?


Algunos de los patrones relacionados con SOA (bus de servicio empresarial, por ejemplo) ofrecen abstracción a un nivel superior y admiten la separación de inquietudes entre los servicios comerciales y los servicios técnicos. El acoplamiento flojo entre los servicios se basa (posiblemente) en la introducción de un intermediario o un autobús que desacopla los servicios en la solución.


La Inyección de Dependencia es una forma de Inversión de control.

Spring Framework tiene una gran base de programadores Java y también tiene una implementación .NET.


La inyección de dependencia con la primavera es mi favorita. Además con maven, es común hacer este truco muy ingenioso para ocultar todas las implementaciones detrás de un módulo API. Entonces, si su código tiene tres módulos, "application-core", "externalsystems-api" y "externalsystems", puede hacer que "application-core" dependa SOLAMENTE de externalsystems-api. Las implementaciones reales y todas sus dependencias pueden ser totalmente invisibles para el módulo de núcleo de la aplicación. Esto realmente impone una separación de preocupaciones mucho más dura y hace que el acoplamiento flojo sea más fácil.

Lo bueno es que los IDE que cargan estas configuraciones maven refuerzan estas restricciones de visibilidad. Entonces no podrás hacer referencia a SQL, AXIS, JAXB o lo que sea en tu núcleo de aplicaciones


La inyección de dependencia y la IOC son excelentes para desvincular el código.

Dotnetrocks show 362 proporciona muy buenas definiciones. También mire el episodio relacionado de DNR TV para obtener una comprensión más clara.


Me encuentro usando el patrón Comando con bastante frecuencia. Es un patrón que sigue dando proyecto tras proyecto.



Sí, los más importantes son Inyección de Dependencia e Inversión de Control, pero no olvidemos la Fábrica Abstracta y los Registros.



El patrón de estrategia.

Me sorprende que esto aún no se haya mencionado: las estrategias te permiten evitar crear clases que conozcan demasiado sobre los diferentes tipos en tu modelo de dominio. Cada estrategia es responsable de codificar una interacción particular que involucra tipos específicos. Esto evita crear un tipo maestro que tenga en cuenta muchos otros y los matices de la implementación de cada uno.

De la Wikipedia:

El patrón de estrategia usa composición en lugar de herencia. En el patrón de estrategia, los comportamientos se definen como interfaces separadas y clases específicas que implementan estas interfaces. Las clases específicas encapsulan estas interfaces. Esto permite un mejor desacoplamiento entre el comportamiento y la clase que usa el comportamiento. El comportamiento se puede cambiar sin romper las clases que lo utilizan, y las clases pueden cambiar entre comportamientos cambiando la implementación específica utilizada sin requerir ningún cambio de código significativo. Los comportamientos también pueden modificarse tanto en tiempo de ejecución como en tiempo de diseño.


Inversión del control como el estilo general de código / arquitectura.

DI como un mecanismo para configurar IoC.

Abstracciones locales (a esto lo llamo "Desarrollo del entorno ideal": escriba como si tuviera el entorno exacto que deseaba).

Normalmente, los objetos se comunican utilizando métodos nulos y pasando datos, en lugar de tener getters / setters.

Nunca utilizo una dependencia directamente en una clase de negocio principal: siempre se abstrae a una abstracción local y un Puente explícito trata con la dependencia.

Descubrí que esta combinación permite un código extremadamente flexible con una gran sensación de composición.


La inyección de dependencia es el patrón que uso en casi todas las clases que escribo; si la clase tiene una dependencia, siempre la inyecto (usando inyección de constructor). Solo las clases que no tienen dependencias (es decir, objetos de valor) no usan el patrón DI. Ser capaz de probar las clases que usan DI es un gran beneficio.

Para obtener información sobre los beneficios de DI, estas dos presentaciones son muy buenas: http://googletesting.blogspot.com/2008/11/clean-code-talks-dependency-injection.html http://googletesting.blogspot.com/ 2008/11 / clean-code-talks-global-state-and.html

No se necesita ningún contenedor DI para usar el patrón DI, pero cuando el programa se vuelve grande (decenas de clases o muchos ámbitos), un contenedor DI puede reducir mucho el texto repetitivo. En la JVM, mi elección predeterminada es Guice .


Creo que una de las técnicas fundamentales es "Tell Do not Ask Principle, Law Of Demeter". Tal vez no sea como DI, UI u otros patrones de diseño, pero creo que los objetos que barrenan este principio están poco relacionados y hacen una sola cosa bien.

"Mantenerlo tímido, mantenerlo seco, decirle al otro chico"


Modelo-Vista-Controlador .

Aparte: las cosas que me detienen escribiendo aplicaciones acopladas no son solo patrones:

  • Nombrando Si no puedo pensar fácilmente en un nombre para mi clase, no hace nada ni demasiadas cosas.

  • Testabilidad . Si no puedo burlarme fácilmente de las dependencias de mi clase, es un diseño acoplado.