una tipos resueltos puede online modelo interfaz interfaces instancia implementacion hacer ejercicios dominio declaracion declara cómo crear como c# interface dependencies loose-coupling

c# - tipos - ¿Define una interfaz para cada clase pública en su modelo de dominio? ¿Pros y contras?



no se puede crear una instancia de una interfaz (9)

Debe definir interfaces para las dependencias entre capas, no para todas las clases. Entonces, su capa de Servicio debería depender de una interfaz de repositorio, y su capa de presentación debería depender de una interfaz de servicio. Después de eso, no hay muchas reglas duras y rápidas, otras las usan donde tiene sentido.

El sentido común es una buena parte de cualquier buen diseño.

¿Implementas una interfaz para cada clase pública en tu modelo de dominio? ¿Pros y contras?

Actualización: si las interfaces de repositorios y las clases de modelo de dominio se definen en ensamblajes separados, ¿no habría una dependencia circular si no definimos interfaces para cada clase de dominio?


Depende del tipo de proyecto. Si está escribiendo una API que se reutilizará en gran medida (como un contenedor API de SharePoint), me inclinaría más por hacerlo.

Para otros proyectos que no serán reutilizados en gran medida, y por defecto, no me estresaría tener una interfaz para cada clase pública. En cambio, me concentraría en tener capas vinculadas utilizando interfaces bien diseñadas.


Desde la perspectiva de la inmutabilidad, podrías considerar poner interfaces en tus objetos de dominio:

En la mayoría de los lugares de su código querrá que sus objetos sean inmutables, de modo que pueda garantizar que no se cambiarán; en este caso, trabajaría con un objeto de acceso a datos de algún tipo que devuelva la interfaz, asegurándose de que su objeto de dominio no puede ser alterado.

Si está escribiendo una página de administrador de algún tipo donde el usuario terminará editando el objeto de dominio, tendrá que exponer a los instaladores: su objeto de acceso a datos deberá devolver las instancias de ''MutableDomainObject'' (ya sea una clase o una subinterfaz). )

Habiendo dicho eso, estoy de acuerdo con la filosofía YAGNI expresada anteriormente: si no necesita garantizar la inmutabilidad en este momento, puede que no valga la pena invertir en esto en este momento. No debería ser demasiado difícil factorizar las interfaces en una fecha posterior.


Desde mi punto de vista, está sobrecargado. Solo mis 2 centavos ...


Las interfaces se pueden usar para hacer que el código sea más expresivo dando un nombre al rol que juega una clase en una situación particular. Una sola clase puede jugar más de un rol. Por ejemplo, cuando un Hombre está interactuando con un Gato, el Gato podría tener una interfaz Mascota, mientras que cuando un Ratón interactúa con un Gato, el Gato podría tener una interfaz Predator.

Es posible que encuentre Funk Roles, not Objects una lectura relevante e interesante.


No, no lo hago ... ¿Por qué lo harías, si no es necesario por el momento?

Si en el futuro debería aparecer, que debería ser necesario (si todos los ''deben'' indican que es un YAGNI), puede realizar una ''interfaz de extracción'' -refactorización.
(Los IDE modernos hacen que sea muy fácil hacerlo).


No.

Contras.

  1. Código de ruido
  2. Más para escribir
  3. YAGNI.

No. Solo interconecta lo que necesitas en ese momento. Si intenta anticiparse demasiado pronto, su código se volverá complejo e imposible de mantener. En poco tiempo, los programadores abandonarán las interfaces porque es muy difícil pasar por todas ellas para descubrir lo que se necesita. Cualquier cosa que se haga por el simple hecho conducirá al desastre.


Podría hacerlo en mi próximo proyecto Asp.Net.

Mi razón es que en el proyecto actual necesitábamos un lugar para almacenar algún estado adicional relacionado con la UI. Si hubiésemos utilizado las interfaces para las clases de modelo de dominio, podríamos colocar en la derecha las subclases de código de control de usuario de la clase de entidad y reemplazarlas con nuestra propia clase que tuviera ese estado adicional.

Lo sé, parece un poco sucio. Me encantaría tener algo similar al marco Seam de Java con los mecanismos de conversación.