Yo participe mucho en esas discusiones y por ello te cuento que muchos de los problemas en este tema estan dados por las limitaciones de los lenguajes estaticos (que eran mucho mayores en delphi antes de la ultimas adiciones).
Hacer que un objeto mapee una tabla es en si sencillo. Puede automatizarse con un generador de codigo. Por ejemplo, en esa epoca leia las estructuras de la BD y generaba las clases.
Sin embargo, rapidamente la cosa se va a complicar debido al
Object-relational impedance mismatch y al hecho que en la capa de negocios se trabaja mas sobre flujos de datos que simplemente operaciones CRUD.
Con todo, la mejor manera es que trates de hacer un micro-orm. Es muy facil. Se puede tener listo algo en menos de 1 semana, en un par de meses tenes algo mediobueno (ej: En Obj-c tengo este publicado:
http://code.google.com/p/chibiorm/).
Pero aun mejor es que uses uno hecho. El de TMS parece bueno.
Tambien ayuda mucho que veas como implementan otros este tema:
Por ejemplo, remobjects tiene el concepto de "no tratemos de hacer un ORM, eso no es buena idea, pero si es buena idea hacer codigo que parece ORM":
http://wiki.remobjects.com/wiki/Stro...lasses_(Delphi)
En .NET, use este:
http://subsonicproject.com/
Y en python, me ENCANTA el ORM de django:
https://docs.djangoproject.com/en/dev/topics/db/
----
Los ORM son en muchos casos usados por quienes no saben nada o poco sobre bases de datos. Y quienes lo saben, prefieren llamadas directas a la BD porque son mas eficientes (los ORM tienden a generar SQL muy ineficientes y redundantes).
Yo tengo una mentalidad intermedia. Me gusta mucho un ORM. Y me gusta poder llamar directamente a la BD (asi hice a chibi). He notado que sqlite & postgres son IDEALES para unir a un ORM:
- sqlite/postgres porque no tiene limites en los tamaños de los campos texto (ej: se puede declarar NAME TEXT y punto)
- postgres porque puedes definir tipos de datos complejos que pueden encajar bien con los ORM
Aun mas ideal es no usar una BD relacional, usar lo que se llama un NOSQL como mongo:
http://www.mongodb.org/ Eso elimina el "Object-relational impedance mismatch" y los objetos mapean directamente, pero pierdes el modelo relacional y otras cosas.