none
Objetos e Interfaces Injeccion de dependencias RRS feed

  • Pregunta

  • Hola a todos.

    Si yo estoy creando una Biblioteca de objetos x,xobjetos pero esos objetos deben de inplementar interface para su funcionalidad

    para que esas interfaces llegen a otros objetos de otras librerias o proyectos, me genera una duda

    los objetos deben formar parte de una dll

    y las interfaces debeb formar parte de otra dll

    o en la misma dll estaran los objetos y las interfaces

    una librería debe tener tanto clases como interfaces o debe haber una librería para clases y otra para interfaces???

    ambas formas me hacen sentido por que yo uso la libreria de interfaces y puedo usar cualquier libreria de clases que implemente las interfaces lo cual es lo que quiero.

    pero tendría que tener un using a la libreria de interface como a la libreria de clases, cosa que no me gusta como se ve jajaja

    ahora si ambas clases e interfaces estuvieran en la misma libreria, solo tendria un using pero de que me sirve si no voy a poder cambiar de libreria para las clases cuando hyga cambios o algo por el estilo

    alguien me puede aconsejar

    martes, 13 de febrero de 2018 7:31

Respuestas

  • Hola buen día.

    En principio depende. Normalmente una librería implementa una comportamiento definido para algo concreto, como por ejemplo, lavarse los dientes. Luego si tu librería My.ToothBrush implementa el comprotamiento en BrushToothService y depende de un almacen de cepillos para cada usuario, podrías definir el comportamiento que debe tener un almacén en la interfaz IToothBrushRepository en la misma librería. Y luego, crear otro ensamblado que se llama My.ToothBrush.PlasticToothBrushContainer que implemente un repositorio. También podrías incluir el comportamiento por defecto de PlasticToothBrushContainer en la misma librería.

    Es decir, en el ejemplo tonto ese, el "comportamiento" que te interesa encapsular en tu librería es el de lavar los dientes, pero tiene una dependencia con otro "comportamiento" que consiste en seleccionar un cepillo de dientes. Puedes ponerlos en ensamblados diferentes y así le das más flexibilidad a los usuarios de tu librería.

    Otro ejemplo, en la solución de logging Microsoft.Extensions.Logging (aquí en github), se definen paquetes diferentes para la definición de las interfaces Microsoft.Extensions.Logging.Interfaces, y luego dentro de Microsoft.Extensions.Logging se definen los comportamientos de logging. Luego podes importar diferentes factorías de Loggers que te permitirán escribir a un fichero, a la nube, etc...

    Salu2

    • Propuesto como respuesta Jorge TurradoMVP martes, 13 de febrero de 2018 10:17
    • Marcado como respuesta niqel martes, 13 de febrero de 2018 18:55
    martes, 13 de febrero de 2018 8:15

Todas las respuestas

  • Hola buen día.

    En principio depende. Normalmente una librería implementa una comportamiento definido para algo concreto, como por ejemplo, lavarse los dientes. Luego si tu librería My.ToothBrush implementa el comprotamiento en BrushToothService y depende de un almacen de cepillos para cada usuario, podrías definir el comportamiento que debe tener un almacén en la interfaz IToothBrushRepository en la misma librería. Y luego, crear otro ensamblado que se llama My.ToothBrush.PlasticToothBrushContainer que implemente un repositorio. También podrías incluir el comportamiento por defecto de PlasticToothBrushContainer en la misma librería.

    Es decir, en el ejemplo tonto ese, el "comportamiento" que te interesa encapsular en tu librería es el de lavar los dientes, pero tiene una dependencia con otro "comportamiento" que consiste en seleccionar un cepillo de dientes. Puedes ponerlos en ensamblados diferentes y así le das más flexibilidad a los usuarios de tu librería.

    Otro ejemplo, en la solución de logging Microsoft.Extensions.Logging (aquí en github), se definen paquetes diferentes para la definición de las interfaces Microsoft.Extensions.Logging.Interfaces, y luego dentro de Microsoft.Extensions.Logging se definen los comportamientos de logging. Luego podes importar diferentes factorías de Loggers que te permitirán escribir a un fichero, a la nube, etc...

    Salu2

    • Propuesto como respuesta Jorge TurradoMVP martes, 13 de febrero de 2018 10:17
    • Marcado como respuesta niqel martes, 13 de febrero de 2018 18:55
    martes, 13 de febrero de 2018 8:15
  • hola

    >>los objetos deben formar parte de una dll y las interfaces debeb formar parte de otra dll o en la misma dll estaran los objetos y las interfaces

    lo correcto seria que esten en dll separados

    de esta forma la definicion del contrato por medio de la interfaz al estar separada puede ser utilizada en varias implementaciones distintas

    ahora bien esto es lo correcto, en la practica se suele definir junto a la dll de la interfaz una implementacion por defecto, por lo general alguna clase mock

    >>pero tendría que tener un using a la libreria de interface como a la libreria de clases, cosa que no me gusta como se ve

    porque? son solo using

    es bueno tener en namespace distintos la interfaz y en otro las implementaciones

    >>ahora si ambas clases e interfaces estuvieran en la misma libreria, solo tendria un using

    eso no es verdad, porque en la mismo proyecto class library puedes crear carpetas, lo cual define al namespace que permite ordenar el codigo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 14 de febrero de 2018 4:19