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