Solución:
Sus términos de ejemplo; DataMapper, DAO, DataTableGateway y Repository, todos tienen un propósito similar (cuando uso uno, espero recuperar un objeto Customer), pero con diferente intención / significado e implementación resultante.
A Repositorio “actúa como una colección, excepto con una capacidad de consulta más elaborada” [Evans, Domain Driven Design] y puede ser considerado como un “objetos en la fachada de la memoria” (Discusión del repositorio)
A DataMapper “mueve datos entre objetos y una base de datos mientras los mantiene independientes entre sí y del propio mapeador” (Fowler, PoEAA, Mapper)
A TableDataGateway es “una puerta de enlace (objeto que encapsula el acceso a un sistema o recurso externo) a una tabla de base de datos. Una instancia maneja todas las filas de la tabla“(Fowler, PoEAA, TableDataGateway)
A DAO “separa la interfaz de cliente de un recurso de datos de sus mecanismos de acceso a datos / adapta la API de acceso de un recurso de datos específico a una interfaz de cliente genérica” permitiendo “Mecanismos de acceso a datos para cambiar independientemente del código que utiliza los datos” (Planos solares)
El repositorio parece muy genérico y no expone ninguna noción de interacción con la base de datos. Un DAO proporciona una interfaz que permite utilizar diferentes implementaciones de bases de datos subyacentes. Un TableDataGateway es específicamente un envoltorio delgado alrededor de una sola tabla. Un DataMapper actúa como intermediario permitiendo que el objeto Modelo evolucione independientemente de la representación de la base de datos (a lo largo del tiempo).
Hay una tendencia en el mundo del diseño de software (al menos, eso creo) a inventar nuevos nombres para cosas y patrones antiguos conocidos. Y cuando tenemos un nuevo paradigma (que quizás difiera ligeramente de las cosas ya existentes), generalmente viene con un conjunto completo de nombres nuevos para cada nivel. Entonces, “Business Logic” se convierte en “Services Layer” solo porque decimos que hacemos SOA, y DAO se convierte en Repository solo porque decimos que hacemos DDD (y cada uno de ellos no es en realidad algo nuevo y único en absoluto, pero nuevamente: nuevos nombres para conceptos ya conocidos reunidos en el mismo libro). Así que no estoy diciendo que todos estos paradigmas y acrónimos modernos signifiquen EXACTAMENTE lo mismo, pero no debería ser demasiado paranoico al respecto. En su mayoría, estos son los mismos patrones, solo que de diferentes familias.
Data Mapper vs Table Data Gateway Para abreviar la historia:
Al final, ambos actuarán como mediadores entre los objetos en memoria y la base de datos.