Principio de inversión de dependencia: ¿Cómo definir “política de alto nivel” y “detalle de bajo nivel” para otras personas?

13

Estoy tratando de explicar el principio de inversión de dependencia a mis colegas (en su mayoría junior). ¿Cómo podemos definir cuál es la "política de alto nivel" y cuál es el "detalle de bajo nivel" en un software? Por ejemplo, si nuestro software automatiza el flujo de trabajo de varias aplicaciones empresariales, ¿por qué decimos que la automatización del flujo de trabajo es la política de alto nivel y las aplicaciones empresariales son los detalles?

    
pregunta Louis Rhys 17.04.2013 - 15:28

3 respuestas

9

Nota: esto se ha reescrito completamente en mi ejemplo anterior

Piensa en las tomas de corriente. En cualquier país dado, la política de alto nivel es que las tomas de corriente son siempre las mismas. No importa de dónde provenga la electricidad (carbón, gas, nuclear), los enchufes de la pared siempre deben emitir la misma cantidad de energía a través del mismo conjunto de conectores.

Ahora puede conectar cualquier dispositivo a ese zócalo, ya que todos tienen una interfaz común, el "enchufe". La política de alto nivel nunca tiene que dictar ninguna parte de ese detalle de implementación. Simplemente enchufa algo y se va.

Ahora, si tiene un dispositivo que no quiere alimentación de CA, tal vez se ejecuta en un circuito de 7 VCC, aún puede usar esa política de alto nivel, solo necesita algún tipo de adaptador entre la fuente de alimentación y el dispositivo. Y, dado que todos tienen la misma política de alto nivel, el fabricante puede incorporar eso a la implementación, sin ningún cambio en la política de alto nivel. La persona que conecta la implementación con la política (usted, enchufando su computadora portátil) tampoco necesita entenderlo.

Además, si el fabricante quiere vender el mismo dispositivo en otro país, todo lo que tienen que hacer es desarrollar un adaptador diferente. Por lo tanto, la misma implementación puede funcionar con varias políticas, mientras que la misma política puede ejecutar varias implementaciones.

Este es un ejemplo perfecto de inversión de dependencia.

Pero aquí está lo interesante: vuelve a lo que dije primero. "No importa de dónde obtengas electricidad". Este es también un detalle de implementación. La política de alto nivel es que todas las tomas de corriente tienen la misma forma y emiten el mismo tipo de energía. Los detalles de implementación de bajo nivel son de dónde proviene la electricidad y qué funciona.

En términos de programación, eso significa que la política de alto nivel es la interfaz (donde un lenguaje lo admite. Otra forma de DI es la tipificación duck) que proporciona una API y la aplicación, y los detalles de implementación de bajo nivel. tanto la aplicación lo consume como la API en sí misma, ninguna de las cuales debe entenderse entre sí.

Los adaptadores pueden usarse para ajustar la misma implementación en diferentes políticas.

    
respondido por el pdr 17.04.2013 - 16:16
7

El enfoque clásico en la reutilización de software es construir componentes que no dependen de nada más (eso es lo que los hace de bajo nivel), y luego construir componentes de alto nivel que dependen de componentes de nivel inferior. "alto nivel" y "bajo nivel" están determinados específicamente por la dirección de la dependencia, que no es inherente a la función del componente, sino que a menudo es solo una decisión arquitectónica.

Por lo tanto, cuando las aplicaciones empresariales únicas se crean sin dependencia de la automatización del flujo de trabajo, pero su controlador de flujo de trabajo tiene dependencias directas de la aplicación empresarial, debe quedar claro que la automatización del flujo de trabajo es una "política de alto nivel" y el negocio La aplicación es un componente de "bajo nivel". Tenga en cuenta que esta estructura no es obligatoria: si su componente de automatización de flujo de trabajo es un marco general, que tampoco está acoplado a sus aplicaciones comerciales específicas, pero puede configurarse para servir a diferentes aplicaciones, entonces ya ha comenzado a aplicar el DIP. En esta situación, la separación de "alto nivel" / "bajo nivel" puede que ya no tenga sentido entre esas dos cosas.

Por lo tanto, el nombre "inversión de dependencia" es un tanto engañoso, ya que las dependencias no son "invertidas", sino que se eliminan por completo (o para ser más precisos: cambiado de las dependencias de tiempo de compilación a dependencias de tiempo de ejecución).

    
respondido por el Doc Brown 17.04.2013 - 16:20
1

Uso una imagen simple para explicar DIP. La vista clásica del desarrollo de software es como un proceso de construcción con cada capa sentada encima de las capas inferiores que la soportan. Usar el principio de inversión de dependencia es más como construir un móvil.

En lugar de las capas superiores situadas en las capas inferiores, las capas superiores en la interfaz móvil con las capas inferiores a través de la cadena que las conecta. En cierto modo, las capas inferiores dependen de esa interfaz para el soporte (sin la cadena que caerían). Eso es DIP en pocas palabras.

    
respondido por el Michael Brown 17.04.2013 - 17:33

Lea otras preguntas en las etiquetas