Digamos que tenemos un par de entidades que queremos persistir utilizando objetos DAO. Así que implementan la interfaz correcta por lo que terminamos conPatrón de diseño DAO
class JdbcUserDao implements UserDao{
//...
}
class JdbcAddressDao implements AddressDao{
//...
}
Así que si quiero ser capaz de cambiar las implementaciones de persistencia de JDBC para la APP (por ejemplo), y viceversa, necesitaría tener JPAUserDao y JPAAddressDao ... Es decir, si tuviera 20 entidades y decidiera cambiar las implementaciones (usando el contenedor DI), tendría que cambiar cada implementación de Jdbc con código JPA.
Ahora podría ser que no he entendido bien cómo funciona DAO, pero ... Si sólo tenía
class JdbcDaoImpl implements UserDao,AddressDao{
//...
}
que había entonces tienen todas las implementaciones JDBC en una clase, y las implementaciones de conmutación sería una pieza de pastel. Además, el recuento de DaoImpl es igual al número de interfaces Dao. ¿Por qué no simplemente agruparlos por implementación (jdbc, JTA, JPA ...) y tener todo bajo una sola clase?
Gracias de antemano.
La misma razón por la que no codifican a cabo su aplicación en un gran 'main()' Método: separación de las preocupaciones. (Por cierto, nadie le impide codificar un 'JdbcDaoBase' abstracto que contenga un código común y lo amplíe en su' Dao') – rsp
¿Por qué debería ser más fácil reemplazar 500 métodos en 1 clase que en 100 clases? –