Principales respuestas
Objetos e Interfaces Injeccion de dependencias

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
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
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
-
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- Propuesto como respuesta Pablo RubioModerator miércoles, 14 de febrero de 2018 22:44