Una classe di Dio è ancora una cattiva pratica se viene usata con i mixin?

1

Ogni descrizione che ho letto sulle lezioni di Dio li considera un anti-modello e una cattiva pratica. La maggior parte delle descrizioni che ho letto sui mixin le considera accettabili in alcuni casi. Se la funzionalità di una classe di Dio viene suddivisa in più mixin, ogni mixina può essere separatamente testata in unità e la separazione delle preoccupazioni è ancora mantenuta, almeno in una certa misura. Quando si tratta di questo, vorrei comunque incapsulare tutte le funzionalità in un unico oggetto. Mi piacerebbe avere opinioni su questo design. Questo disegno è una cattiva pratica?

    
posta J. Darnell 20.11.2017 - 18:12
fonte

2 risposte

8

Mi spiace essere il portatore di cattive notizie:

Sì.

Più grande è l'applicazione, più problemi causeranno. Cosa succede quando provi a nominare un metodo do_thing , importalo nella tua classe di dio e scopri che ha già un metodo chiamato do_thing ? Ora devi preoccuparti delle collisioni nello spazio dei nomi nella tua classe di Dio: che dolore!

Un altro (piccolo): se tutto va qui, e più persone stanno lavorando su diversi moduli, ma tutti devono "registrare" le cose nella tua classe di Dio, allora avrai a che fare con molti conflitti di fusione non necessari per quella classe nel tuo repository di codice. Se le cose separate erano sempre separate, allora hai meno preoccupazioni da parte delle persone che si calpestano le dita dei piedi.

Queste sono solo alcune delle cose che ti vengono in mente. In realtà, però, ti stai avvicinando dalla prospettiva sbagliata: perché vorresti farlo? Se hai tutto ben separato e organizzato, perché vorresti annullare tutto ciò e buttarlo tutto in una singola classe? Ciò potrebbe farti risparmiare alcune dichiarazioni di import nella parte superiore del tuo codice, o meno dipendenze che devono essere iniettate, ma niente di tutto ciò sta sostanzialmente migliorando la tua base di codice, e ha un costo reale. È una formula semplice: cost + no benefit = bad idea . Stai già facendo la parte "difficile" di dividere la tua domanda piacevolmente. Non rovinare tutto sul tratto casalingo.

    
risposta data 20.11.2017 - 18:58
fonte
1

Dai tuoi commenti, sembra che tu voglia avvicinarti a questo dal punto di vista di un Contenitore IoC . Se la tua applicazione ha una serie di funzionalità disponibili al suo interno, e devi disporre di pezzi, determinati in fase di esecuzione, utilizzare tale funzionalità, l'approccio migliore è probabilmente un contenitore di inversione di controllo con iniezione di dipendenza.

  1. La tua applicazione consiste in un set di librerie, probabilmente singoli oggetti che sono legati insieme in una più ampia funzionalità.
  2. I raggruppamenti funzionali sono conformi ai mixins descritti in precedenza.
  3. Le singole classi di "progetto" verranno aggiunte all'applicazione per specifiche funzioni di comando-controllo-reporting, e man mano che tali progetti vengono aggiunti, le loro dipendenze su tali interfacce saranno vincolate, usando l'iniezione di dipendenza.
  4. Ogni classe di progetto verrà eseguita nell'ambiente come se avesse accesso alle varie interfacce. Il controllo passerà avanti e indietro tra l'applicazione principale e la classe del progetto.

A volte viene chiamato framework di applicazione.

    
risposta data 20.11.2017 - 19:42
fonte

Leggi altre domande sui tag