precisionmapper patron imf español diseño data datamapper

datamapper - imf - patron de diseño data mapper



Patrón de mapeador de datos (3)

Sugeriría que eche un vistazo a una herramienta O / R-mapper antes de intentar implementar el patrón Data Mapper usted mismo. Esto le ahorrará mucho tiempo. Una opción popular de O / R-mapper es NHibernate .

Hasta ahora he estado usando registros activos en todas mis aplicaciones basadas en bases de datos c #. Pero ahora mi aplicación requiere que mi código de persistencia se divida desde mis objetos comerciales. He leído muchas publicaciones sobre el patrón de mapeo de datos de Martin Fowler, pero mi conocimiento de este patrón sigue siendo muy limitado.

Usemos el siguiente ejemplo:

Si tengo 2 tablas: Customer y CustomerParameters. La tabla CustomerParameters contiene los valores predeterminados del Cliente para crear un nuevo Cliente.

Luego tendré que crear una clase CustomersMapper para manejar toda la persistencia del Cliente. Mi clase Cliente y Lista de clientes colaborará con esta clase de asignador para conservar los datos del cliente.

Tengo las siguientes preguntas:

  1. ¿Cómo transferiría datos RAW A y DESDE mi clase Cliente al mapeador sin romper ciertas reglas comerciales? ¿DTO?

  2. ¿Es aceptable tener un método SaveAll y LoadAll en mi clase Mapper para actualizar y cargar datos de múltiples clientes? Si es así, en el caso de SaveAll, ¿cómo sabrá el mapeador cuándo actualizar o insertar datos?

  3. ¿La clase del asignador del Cliente será responsable de recuperar los valores predeterminados de la tabla CustomerParameters, o será mejor crear un asignador CustomerParameters?

La herramienta de asignación AO / R realmente no está aquí. La base de datos que estoy usando es Transaccional y requiere que escriba mi propio Patrón de Mapper.

Cualquier idea y comentario será muy apreciado.


Shaun, respondería tus preguntas de esta manera:

anuncio 1) Mapper es responsable de crear el objeto Cliente. Su objeto Mapper tendrá algo así como el método RetrieveById (por ejemplo). Aceptará una identificación y de alguna manera (que es responsabilidad del objeto Mapper) construirá el objeto Customer válido. Lo mismo es cierto a la inversa. Cuando llama al método Mapper.Update con un objeto Customer válido, el objeto Mapper es responsable de asegurarse de que todos los datos relevantes se mantienen (cuando corresponda: db, memoria, archivo, etc.)

anuncio 2) Como indiqué anteriormente, recuperar / persistir son métodos en el objeto Mapper. Es su responsabilidad proporcionar tal funcionalidad. Por lo tanto, LoadAll, SaveAll (probablemente pasando una matriz de objetos de valor) son métodos válidos de Mapper.

anuncio 3) Yo diría que sí. Pero puede separar varios aspectos de los objetos de Mapper en clases separadas (si lo desea / necesita): valores predeterminados, validación de reglas, etc.

Espero que ayude. Realmente te sugiero / recomiendo que leas el libro de Martin Fowler Patterns of Enterprise Application Architecture .


Puede ver iBATIS.NET como una alternativa a NHibernate. También es una herramienta de O / R, pero he descubierto que es un poco más fácil de usar que NHibernate.

http://ibatis.apache.org/