riferimento a una fabbrica dal prodotto

1

Diciamo che ho una classe complessa, forse una House quindi separo la sua logica di creazione in una classe factory, HouseFactory.Build()

Tuttavia, queste classi sono per una DLL API e abbiamo riscontrato che molti dei nostri utenti sono confusi e non riescono a discernere che devono utilizzare HouseFactory , quindi aggiungiamo la seguente funzione di collegamento statico alla House class:

class House
{
     public static House Build()
     {
         return houseFactory.Build();
     }
}

Quali sarebbero i potenziali svantaggi, di avere un metodo di creazione nella classe che esternalizza la logica effettiva in una fabbrica?

    
posta TheCatWhisperer 24.07.2017 - 17:03
fonte

1 risposta

4

Ecco alcuni inconvenienti:

  • Stai creando una dipendenza circolare tra HouseFactory e House .
  • Sta usando un globale? I globals sono pessimi . Se non è globale, dove è definito houseFactory e chi lo costruisce e lo assegna?
  • Potrebbe non essere sicuro? Cosa succede se House.Build() viene chiamato prima che venga impostato houseFactory ? houseFactory può essere cambiato?
  • È inflessibile. House.Build può solo costruire case in un modo specifico, ma usare HouseFactory direttamente è destinato a essere più flessibile.
  • È ridondante - che potrebbe creare una più confusione negli utenti. Potrebbero non sapere quale sia il metodo migliore per creare istanze di House . Potrebbe anche confondere i maintainer. Potresti avere correzioni di bug applicate in modo errato a House.Build() anziché essere applicate a HouseFactory
  • Potrebbe essere difficile eseguire il test dell'unità. È possibile simulare houseFactory ?
  • Richiederà comunque la documentazione che gli utenti potranno leggere. Dovrai spiegare esattamente che tipo di casa viene creata da House.Build() . Sarebbe altrettanto semplice documentare House per affermare che HouseFactory dovrebbe essere usato per costruire istanze ed evitare questi inconvenienti.

Alcune alternative:

  • Documenta come devono essere costruite le istanze di House sia su House stesso che nelle guide dell'utente.
  • A seconda della lingua scelta, potresti essere in grado di limitare l'accesso al costruttore di House al tuo spazio dei nomi. Ciò costringerà l'utente a consultare la documentazione e utilizzare HouseFactory .
risposta data 25.07.2017 - 00:00
fonte

Leggi altre domande sui tag