Ho alcuni problemi di progettazione con il mio progetto. Per illustrare il mio problema, userò le seguenti due classi dal mio progetto.
public class RAM_UserManagement{
private Map<int,User> userList;
public User addUser(User user){//do stuff}
public User deleteUser(User user){//do stuff}
public User updateUser(User user){//do stuff}
public List<User> getAllUser(){//do stuff}
public User getUserById(int userId){//do stuff}
}
public class RAM_ServiceManagment{
private Map<int,Serivce> serviceList;
public Service addService(Service ser){//do stuff}
public Service deleteService(Service ser){//do stuff}
public Service updateService(Service ser){//do stuff}
public List<Service> getAllSerivces(){//do stuff}
public Service getServiceById(int id){//do stuff}
public Service getServiceByStatus(ENUM_STATUS status){//do stuff}
public Service getServiceByUserName(String Name){//do stuff}
}
Come puoi vedere, dalla natura di queste classi entrambi fanno esattamente la stessa cosa con alcune funzionalità extra. Sto cercando di generalizzarlo creando un'interfaccia. Questo è quello che ho in mente
public interface IStorage<T>{
public T add(T item);
public T delete(T item);
public T update(T item);
public List<T> getAll();//This is where I am struggling..
}
Quindi l'operazione CUD in entrambe le classi è ok da implementare ma il metodo R (Read) in entrambe le classi varia. In RAM_ServiceManagement ho extra getAll, getById, getStatus, getByName dell'altra classe.
Come posso generalizzare questo? o la generalizzazione non può essere applicata qui? Apprezzo davvero se puoi dare qualche suggerimento.
Grazie