che ricarica le classi singleton e la dipendenza

3

Ho un oggetto singleton. È un DAO che assomiglia un po 'a questo (codice pseudonimo):

class UsersDAO {
  public usersDAO init(string sDSN){
    variables.sDSN = sDSN;

    return this;
  }

  public array getUsers(){
    //do a query to get users, make into array

    return aUsers;
  }
}

le mie applicazioni creano un'istanza di questo e la usano in tutto il codebase, ma ho anche un altro DAO che lo richiede:

class OrganisationsDAO {
  public OrganisationsDAO init(UsersDAO oUsersDAO,string sDSN){
     variables.sDSN = sDSN;
     variables.oUsersDAO = oUsersDAO;

     return this;
  }

  public array getUsersOrganisations(){
    variables.aUsers = variables.oUsersDAO.getUsers();

    //getOrganisations for the returned users

    return aOrganisations;
  }
}

Quindi per rendere l'oggetto OrganisationsDAO ho bisogno di passarlo a UsersDAO.

In un secondo momento nella mia vita delle applicazioni, ho bisogno di aggiornare UsersDAO per includere una funzione public user getUser(int userid) .

Mi chiedo, c'è un modo per passare attraverso il nuovo UsersDAO agli oggetti che dipendono da esso, senza dover riavviare l'applicazione. In questo caso, l'applicazione è un sito Web anziché un'applicazione desktop.

    
posta Jarede 20.03.2014 - 22:34
fonte

1 risposta

1

Non passare un oggetto alle classi client. Passa una funzione che fornisce loro l'oggetto di cui hanno bisogno (una fabbrica, un fornitore). Convinci che chiamare questa funzione è economico, perché restituisce immediatamente un valore memorizzato nella cache quando possibile, in modo che non mantengano i propri valori memorizzati nella cache a lungo termine.

Eliminare variables.oUserDao e sostituirlo con un po 'di variables.oUserDaoProvider . Poi qualcosa come variables.oUserDaoProvider.getDao().getUsers() ti permette di controllare quale getDao() restituisce dall'esterno, mentre i tuoi clienti ottengono sempre il DAO corretto.

    
risposta data 20.03.2014 - 22:48
fonte