Actualmente me encuentro en el diseño e implementación de una interfase de acceso a servicios (más que nada, llamadas a web services).
Lo que inicialmente se hizo fue lo siguiente:
Interface
public interface DataAccessService
{
public List getCreditCards() throw ServiceException;
}
Implementadora
public class DataAccessServiceImpl implements DataAccessService
{
public List getCreditCards() throw ServiceException
{
...
...
return creditCardsList;
}
}Hasta aqui todo bien, en la implementadora creamos los inputs necesarios y llamamos al proxy generado para la comunicación con el servicio web.
Ahora, pongamonos en el caso de que el servicio nos devuelve todas las tarjetas (Bloqueadas y No Bloqueadas) y uno de los requerimientos es solo obtener las tarjetas No Bloqueadas.
A continuación la solución planteada:
Interface
public interface DataAccessService
{
public List getCreditCards() throw ServiceException;
}
Implementadora encargada de la llamada al servicio web
public class DataAccessServiceImpl implements DataAccessService
{
public List getCreditCards() throw ServiceException
{
...
...
return creditCardsList;
}
}Implentadora encargada del filtro
public class FilterDataService implements DataAccessService
{
private DataAccessService dataAccessService;
public FilterDataService(DataAccessService dataAccessService)
{
this.dataAccessService = dataAccessService;
}
public List getCreditCards() throw ServiceException
{
List creditCardsList = dataAccessService.getCreditCards();
// Do something with the result, extra functionality
...
...
return filteredCardsList;
}
}Como hemos visto, creando la clase FilterDataService, podemos agregar funcionalidad extra luego de llamar a la clase DataAccessServiceImpl, pudiendo aqui realizar el filtro que requerimos. En nuestro ServiceFactory colocariamos algo como esto para obtener la implementacion necesaria:
private static DataAccessService dataAccessService = new FilterDataService(new DataAccessServiceImpl());
public static DataAccessService getDataAccessService()
{
return dataAccessService;
}
Bueno, espero les sirva esto en algún momento en algún proyecto de desarrollo. Yo lo estoy utilizando ahora.
Nos vemos!