¿Cuál es la diferencia entre el Mapeador de datos, el Table Data Gateway (Gateway), el Data Access Object (DAO) y los patrones de repositorio?

Estoy tratando de repasar mis habilidades de diseño de patrones, y tengo curiosidad por saber cuáles son las diferencias entre estos patrones. Parece que todos son lo mismo: encapsulan la lógica de la base de datos para una entidad específica, de modo que el código de llamada no tiene conocimiento...