Quando una colla o una classe dirigente fanno troppo?


10

Sono incline a costruire classi centralizzate che gestiscano le altre classi nei miei progetti. Non memorizza tutto da solo, ma la maggior parte delle richieste di dati andrebbe prima al "gestore". Mentre guardavo una risposta a questa domanda, ho notato il termine "God Object". Wikipedia lo elenca come un antipasto, comprensibilmente.

Dov'è la linea tra una classe di colla legittima, o modulo, che passa dati e messaggi da un luogo all'altro e una classe che sta facendo troppo?

Risposte:


15

Molte persone dicono cose come "una classe non dovrebbe mai essere più grande della tua testa".

Tuttavia, ho appena partecipato a una discussione con alcuni programmatori davvero eccezionali di livello mondiale su questo argomento. Ne ho parlato con uno dei ragazzi di Naked Objects. Per quanto ne sappiamo, a volte succede questo e non c'è molto modo di aggirarlo.

Normalmente, tuttavia, l'unica classe a cui ciò accade è un oggetto di dominio che rappresenta l'elemento fondamentale del tuo dominio: un Conto bancario, una Vendita al dettaglio, ecc. Se lo trovi accade anche ad altre classi, probabilmente voglio considerare la responsabilità di quella classe. Ecco i miei consigli:

  • Se si chiama "Manager", "Helper" o "Service", è probabile che sia troppo grande. Una volta che hai effettivamente capito quale dovrebbe essere la responsabilità di una classe, troverai più facile delegare le altre responsabilità.
  • Se si chiama "Controller", dovrebbe essere responsabile del controllo dell'interazione tra un gruppo di altre classi ... e nient'altro.
  • Se è il passaggio di dati e messaggi tra i diversi nodi fisici, allora neanche si dovrebbe trattare con la conversione di un messaggio specifico ad una forma serializzato, o si gestisce il meccanismo di trasferimento. Ad esempio, potresti avere una classe che converte una transazione bancaria in XML e un'altra classe che invia tale XML su HTTP.
  • Se sta passando eventi tra moduli diversi in un'applicazione, dovrebbe essere responsabile di dire agli ascoltatori quando viene generato un evento e nient'altro.

Come regola generale, se è troppo grande, vedi se riesci a delegare qualsiasi responsabilità a un'altra classe e, se non puoi, probabilmente è OK.


Buona risposta con utili linee guida concrete. Tendo a creare classi come questa per oggetti di dominio in cui tutti o quasi tutti i dati rappresentano alcuni aspetti del dominio e voglio essere in grado di trattarli come un'unità. Quindi tendo a delegare le effettive responsabilità a classi che sono realmente istanziate all'interno della grande classe. Quindi sono abbastanza vicino alla linea e probabilmente dovrei inclinarmi a ridurre le singole classi quando la scrivo.
giovedì
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.