Esiste un nome per questo motivo di progettazione? [chiuso]

3

Non mi piacciono i singleton, ma devo scendere a compromessi ora (ma solo come misura temporanea).

Tuttavia non voglio andare completamente singleton. Preferirei usare questo schema:

interface NameThisInterface {

  //Returns the currently centralized object.
  static function current();

  //Centralizes the instance.
  function centralize();

}


class A implements NameThisInterface {
   ...
}


$obj = new A;


$obj->centralize();

...


A::current(); //gets $obj.

Fondamentalmente A sarebbe la mia classe "Applicazione". Tutti i controllori, i modelli e le viste ecc. Avranno bisogno di una sola istanza. Ma per semplificare i test unitari, tra le altre ragioni, voglio che l'oggetto dell'applicazione sia memorizzato come riferimento a tutte le classi MVC. Quindi, con il modello sopra, la conversione in questo momento successivo sarà più semplice e alcuni dei test unitari potrebbero essere più semplici.

Esiste un nome generalmente accettato per questo modello?

    
posta d_inevitable 27.02.2013 - 13:14
fonte

2 risposte

3

È una combinazione di Singelton e qualche forma di "Creator Patter" (probabilmente una Fabbrica (anche se la tua fabbrica è un po 'sul lato disorganizzato (dato che non possiamo vedere la maggior parte del codice)).

Non c'è niente di sbagliato nel combinare Singelton con altri modelli. In effetti, personalmente penso che puoi NOT usare correttamente un singelton a meno che non lo combini con qualche altro modello di creatore (opinione personale). Il motivo è che il codice strettamente accoppiato ad una singola versione di un oggetto rende il codice molto inflessibile e fragile (e difficile da testare).

Personalmente mi piace formalizzare la fabbrica e consentire la registrazione di diverse versioni (cioè una versione di prova / versione di produzione / una versione ISS). Quindi possono essere usate diverse fabbriche (una istanziata all'avvio) a seconda della situazione, quindi il singelton viene ancora creato su richiesta (che è una proprietà importante di un singelton (specialmente se si tratta di un oggetto pesante)).

    
risposta data 27.02.2013 - 15:42
fonte
1

Il commento di Simon ha colpito il chiodo sulla testa. Quello che hai è quasi esattamente una variabile globale con i metodi get / set.

Dico quasi poiché il metodo set non è statico; ciò impedirà di impostare la variabile globale su null dopo che è stato assegnato un valore. Potresti discutere se questa sia una buona cosa. Direi "no": ricorda che non c'è nulla che ti costringa ad assegnargli un valore in primo luogo!

Se devi dargli un nome dignitoso, magari con "global instance holder / container / etc". Se ti assicuri che la parola "globale" sia lì il più possibile (vale a dire anche con i tuoi metodi getter / setter), dovrebbe apparire come un pollice dolente per chiunque la usi.

    
risposta data 27.02.2013 - 16:43
fonte

Leggi altre domande sui tag