Te recomiendo que veas algunos documentos de Martin Fowler sobre los patrones DAO y DataMapper.<br><br>Basicamente el Patron DAO significa DataAccessObject es decir por cada clase de tu modelo vas a tener una clase Mapper que mapea ese objeto con la base de datos y viceversa, se encarga de tener metodos miembro que reciban un objeto de tu modelo y lo inserten en la base de datos, que lo updateen o lo borren asi como para hacer consultas a tus necesidades.
<br><br>Es mas si tenes una jerarquia completa de clases de negocio podes tener una clase base o abastracta con metodos virtuales que definan la interfaz insertar, updatear, remover, listar, y con metodos virtuales tambien para devolver las consultas SQL a ejecutar, asi luego cada clase derivada y especializada pueda usarse de DAO de forma tal que solo devuelva la consulta SQL correcta. Estos objetos diseƱarian dando uso del patron template.
<br><br>Tambien podemos mezclar el patron DAO con el patron AbstractFactory para abstraer al cliente no solo de las consultas SQL sino tambien de la persistencia que estamos usando.<br><br>Yo puedo tener una jerarquia de modelo con clases de modelo, puedo tener interfaces DAO que definan un uso comun de una clase DAO y puedo tener implementaciones DAO de esas interfaces para usar con SQL, con XML, o con algun otro metodo de persistencia, luego definiria una interfaz DAOFactory que tenga metodos virtuales de creacion de DAO y para cada tipo de DAO o implementacion de DAO (Ya sea SQL, XML, o de otro tipo) tener un DAOFactory concreto.
<br><br>Con esto no solo abstraemos al cliente del acceso alos datos sino de la forma en que estos datos estan representados pudiendose cambiar muy facilimente con simplemetne recompilar (En caso de lenguajes compilados como C++) o via reflection en lenguajes interpretados que soportan reflection como son .NET Framework y Java.
<br><br>Saludos<br>Pablo