¿Cuándo utilizar el patrón Facade para bases de datos?
En proyectos grandes que queremos adaptarlos a diferentes entornos o instalaciones.
¿Porqué utilizar el patrón Facade?
Como su propia traducción indica, este patrón actúa de Fachada. Lo que conseguimos es abstraer una capa de otra, de forma que si una capa cambia… no hace falta cambiar la otra!
¿Cómo debe estar estructurado?
- Organizaremos todas las funciones que tengan que ver con una funcionalidad en las llamadas Facade. Ejemplo: UsersFacade, podremos funcionalidad al estilo loginUser, loadUsers, saveUsers, addRolToUser, etc.
- Estás contendrán llamadas a los DAOs (Véase Patrón de diseño DAO) que tiene la interacción con la base de datos
- Cuando iniciemos la aplicación, seleccionaremos la fachada o Facade que queramos en función de la instalación (por ejemplo: una empresa dispone de MySQL y otra quiere Oracle!! no tienes que cambiar toda la aplicación sino implementar Facades distintas y cargar la fachada que quieras utilizar al principio.
Pon un ejemplo porque no lo pillo
Las clases Facade quedan de la siguiente forma:
public class UsersFacade { public User loginUser(String userName, String password, Integer company_id) throws Exception { UsersDAO usersDAO = new UsersDAO(); User user = usersDAO.getUserByLoginPassword(userName, password, company_id); return user; } public User loadUser(int id) throws Exception{ UsersDAO usersDAO = new UsersDAO(); User user = usersDAO.getUserById(id); return user; }
Cuando necesites utilizar alguna de estas funciones deberás hacer:
UsersFacade uf = new UsersFacade(); uf.loadUser(this.view.getSelectedUser().getUserId());