Hay algo que aprendi hace unos anios con varias personas de la comunidad, especialmente de nuestro amigo Fabio... No es que tu respuesta este mal y la mia mejor, es que simplemente esa es _mi_ respuesta y la otra _tu_ respuesta... Eso ha guiado mi vida profesional y he aprendido mucho gracias a ello =)
La otra que he aprendido en mis cortos anios de vida es simple, TODO depende, y es simple y sencillo, no solo de los factores que mencionas, si no de muchas otras cosas mas, como por ejemplo, es un pinche prototipo o es la mera app que vamos a meterle mano todo el tiempo? Cuanto tiempo tengo para hacerlo? Sabes o no sabes que estas haciendo? y hasta del lenguaje que pretendes usar... Vamos, depende hasta del clima, algunos programamos mejor cuando hace frio... (en mi caso soy fatal en climas humedos y calientes).
Ahora bien, yo 'crei' que la pregunta iba orientada a que piensa cada uno que debe ser, y en lo personal creo que todos mostramos nuestro punto de vista en esta thread que se ha tornado en una mas interesante de lo esperado... De hecho, gracias a mucho que se ha mencionado aqui y a la discusion de muchas otras personas (online, twitter, cara a cara) me he percatado de muchos otros puntos mas, es por eso que no cambio a la comunidad =)
Ahora bien, pongamos la pregunta en un contexto de "depende".
"Tiene sentido usar una DAL con un ORM?"
Depende:
1. Si usas un ORM es posible que tus companeros de trabajo esten mas acostumbrados a escribir LINQ que SQL o a ponerse a escribir codigo como locos, a nadie le gusta eso, entonces simplemente no, no tiene sentido.
2. Si todos han escrito codigo usando DAL's antes, tampoco, pueden hacerse a la idea que su 'DAL' es la ISession, o el DataContext, o el ObjectContext y simplemente usar el SaveChanges, Update, Delete, etc... expuesto, no veo razon para agregar otra capa mas
3. Si tu equipo es inexperimentado, no tiene sentido agregar una capa mas de abstracion a algo que ya es por si una abstracion de tus datos
4. Si tu equpo es experimentado, bueno, ahi es cuestion del gusto del equipo... He aprendido que entre equipos experimentados es casi imposible razonar y todos sacaran a relucir casos de uso, edge cases, experiencia anterior, malos entendidos y hasta el clima laboral... Asi que ahi si es como jugar una ruleta rusa y ver al final que decide el 'lider' del proyecto... tristemente.
Ahora bien, tambien depende de:
1. Si la empresa quiere que uses un DAL porque asi lo ha hecho siempre, no hay otra opcion, probablemente esa misma empresa este en contra de cosas como IOC, TDD, etc... y tendra siempre razones y las esgrimira para defenderlas, igual al caso 4 anterior.
2. Si ya existia una DAL anterior y debes simplemente continuarla, no hay otra opcion
3. Si con DAL se refieren a cosas como un Reposiorio (que no es una DAL) entonces convencete a ti mismo que estas trabajando en la DAL
Al final de cuentas todo depende, y uno debe aprender a cuando torcer el brazo cuando es necesario, o como me menciono un Lead Consultant en un proyecto una vez: "this is my project and you should do what I think it's the better, when you run your own do what you think it's right, not this time"... Asi que a veces depende como menciona Juan.
Igual, otro dia continuo el blog post... =)
Saludos!
Cristian Prieto