Interfacce semplificate o astrazione oggetto

5

Mi sono trovato di fronte a una situazione comune al lavoro che si è verificata abbastanza spesso durante la gestione degli oggetti.

La situazione è la seguente:

Devi eseguire le classi A e B, la classe A ha un'istanza di classe B. Ora, immagina che vogliamo chiamare il metodo B della classe B, ma abbiamo solo accesso a un'intanza della classe A. Qual è l'approccio migliore a questa situazione e perché:

Ainstances->getClassBInstance()->methodB();

o

Ainstances->methodB()

dove methodB è implementato come segue:

function methodB()
{
  return self.getClassBInstance()->methodB()
}
    
posta guiman 08.06.2011 - 16:11
fonte

2 risposte

3

Vai con il metodo Ainstances- > metodoB ();

Dai una copia del metodo che scende semplicemente sulla sua istanza B.

In questo modo, se decidi di refactoring, ad esempio se decidi di spostare il metodo B dall'istanza di A a una nuova classe, C, avrai meno refactoring da fare.

Questo è noto come modello di facciata e mi ha risparmiato un sacco di ore di lavoro doloroso in molte occasioni: )

    
risposta data 08.06.2011 - 16:17
fonte
0

Quest'ultimo - cioè, metodoB () che avvolge self- > getClassBInstance () - > metodoB () - nasconde agli utenti di A il fatto che A usa B. Ciò riduce l'accoppiamento.

(Questo è un esempio di applicazione della legge di Demeter.)

    
risposta data 08.06.2011 - 16:16
fonte

Leggi altre domande sui tag