Me han lanzado y he comenzado a aprender Fluidez NHibernate (ninguna experiencia anterior de NHibernate). En mi proyecto, estoy programando interfaces para reducir el acoplamiento, etc. Eso significa que prácticamente "todo" se refiere a la interfaz en lugar del tipo concreto (IMessage en lugar de Message). La idea detrás de esto es ayudar a que sea más comprobable al poder burlarse de las dependencias.Programación de interfaces al mapear con Fluidez NHibernate
Sin embargo, (Fluido) NHibernate no ama cuando trato de asignar a interfaces en lugar de clases concretas. La cuestión es simple - de acuerdo con el Fluido Wiki, es inteligente para definir el campo de ID de mi clase como por ejemplo
int Id { get; private set; }
para obtener una clave primaria típica generada automáticamente. Sin embargo, eso sólo funciona con clases concretas - que no se puede especificar un nivel de acceso en una interfaz, donde la misma línea tiene que ser
int Id { get; set; }
y supongo que niega hacer el colocador privada en la clase concreta (la la idea es que solo NHibernate debe establecer el ID asignado por el DB).
Por ahora, supongo que haré público al colocador y trataré de evitar la tentación de escribirlo ... Pero, ¿alguien tiene una idea de cuál sería la forma "adecuada" y de mejores prácticas para crear un campo de clave primaria adecuado en el que NHibernate solo puede escribir mientras solo se está programando en las interfaces.
ACTUALIZADO
Por lo que entiendo después de las dos respuestas por debajo de mookid y James Gregory, que bien puede ser en el camino equivocado - no debería ser una razón para mí tener una interfaz por entidad como tengo ahora Eso está muy bien. Supongo que mi pregunta es: ¿no hay motivo para programar al 100% contra una interfaz para cualquier entidad? Y si hay incluso una sola situación donde esto podría justificarse, ¿es posible hacer esto con (Fluido) NHibernate?
Lo pido porque no sé, no para ser crítico. Gracias por las respuestas. :)
Es curioso porque algunos desarrolladores que respeto han asumido accidentalmente el antipatrón de interfaz de entidad. Es más un error que hacen los profesionales, que novatos, ya que los novatos apenas saben por qué las interfaces son importantes en primer lugar. –
Si no está creando interfaces para sus entidades, ¿cómo prueba el comportamiento de sus entidades? Más específicamente, ¿cómo te burlas de las dependencias de esa entidad? –
Cuando la gente dice que programar interfaces no implementaciones, no significan la construcción del lenguaje de interfaz. Significan tratar de encasillar el código que está usando tanto como sea posible. Es decir. Cuando utilice un Enumerador en un diccionario, no suponga que Current no lanzará antes de que se invoque movenext, no está definido y puede cambiar. – stonemetal