Fluent NHibernate : Component() y ComponentMap

Pensemos que ya hemos interactuado aunque sea un poco con Fluent Nhibernate

Al momento de realizar nuestros mapeos podemos manejar la composición simple manteniendo en una sola tabla las clasesque se relacionan

Figura 1: Clases para Ejemplo Nhibernate con 2 clases utilizando Component()

En este caso “PreInitSearchContext” esta compuesto por un “ContextCreator”.

Traduciendo esto a un Mapeo con FluentNhibernate utilizando “Component()” tendríamos algo así:

Figura 2: Codigo Ejemplo Nhibernate con 2 clases utilizando Component()

Y con esto estaríamos Manteniendo en la misma tabla “pre_init_search_context” ambas clases.

Ahora bien, resulta que existe otra clase que tambien tiene una relación de composición con “ContextCreator”, asi:

Figura 3: Clases para Ejemplo Nhibernate con 3 clases utilizando ComponentMap<T>

Imagino que pensaron en “reutilizar” el código del método Component que tenemos en la clase anterior… y aunque es una opción, estamos generando código repetido y obviamente cayendo en conflictos existenciales relacionados con mantenibilidad.

Es aquí donde “ComponentMap<T>” entra en juego, permitiendonos reutilizar el mapeo, en este caso del “ContextCreator”, entre las clases que sean necesarias :)

Queda entonces nuestro mapeo asi:

Figura 4: Codigo Ejemplo Nhibernate con 3 clases utilizando ComponentMap<T>

dejando en cada una de las clases solamente:

Figura 5: Codigo Ejemplo Nhibernate con 3 clases utilizando ComponentMap<T>

De esta forma las clases “PreInitSearchContext” y “SearchContext” con sus respectivos mapeos independientes pueden reutilizar el mapeo de “ContextCreator” el cual se traducirá a un par de campos (segun la clase utilizada en el ejemplo) en cada una de las tablas correspondientes.

Comparte Este Post:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • FriendFeed

About fboiton

I'm a Software Developer specialized in Web Solutions for Large Scale and High Availability Applications, with more than 8 years of experience in Web Applications development. Software Architecture, Team Management and Continous Improvement are my bigger interests. Specialties ASP.NET, SQL Server, Web Development in general, Linux Servers, Software Architecture, Team Management.
This entry was posted in Desarrollo de Software and tagged , , , , . Bookmark the permalink.

Leave a Reply