Legge sui problemi di Demetra con progettazione di classi complesse

1

Ho già postato domande relative a questo problema, ma hanno affrontato tutti aspetti diversi del problema (solo per sapere che non sto ripubblicando la stessa domanda per ottenere più risposte).

Quindi, in poche parole, ecco il mio problema: ho una classe Timeline , che ha una variabile membro dell'interfaccia% -a% co_de. La linea temporale gestisce QUANDO il contenuto viene attivato. Esiste anche una classe Content , che ottiene un riferimento alla classe Trigger e chiama i metodi Timeline Timeline in determinati momenti (come quando l'utente colpisce la barra spaziatrice). Per organizzare insieme play() e Triggers , vengono uniti insieme in una classe chiamata Timeline (che è l'unica classe a cui interessa il resto del programma).

Questo mi porta a un problema di progettazione, dal momento che questa classe Cue viene usata così spesso nel mio codice, sarebbe un problema cambiarla in seguito.

A causa della Legge di Demetra , non dovrei fare getter e setter per Cue e timeline variabili membro, e invece copia molte delle loro funzioni in triggers (e chiama a turno le funzioni delle variabili membro). In questo modo, le altre classi non conosceranno il funzionamento interno di esso?

    
posta sinθ 09.08.2013 - 17:43
fonte

1 risposta

2

Because of the LoD, should I not make getters and setters for the timeline and triggers member variables, and instead copy many of their functions into Cue (and just call the functions of the member variables in turn). That way, other classes won't know the inner workings of it?

Risolvi questo in tre modi, a seconda delle operazioni di Timeline / Trigger che devono essere eseguite nel codice dell'applicazione.

Se il codice dell'applicazione deve essere in grado di chiamare la maggior parte dei metodi di Timeline e Trigger, l'aggiunta di deleghe a Cue è inutile. Ogni aggiunta a Timeline o Trigger richiederà una modifica corrispondente in Cue e il codice sarà peggiorato, non meglio.

Se il codice dell'applicazione deve chiamare molti metodi, ma alcuni metodi non devono essere richiamati su oggetti incapsulati in una Cue, allora potrei creare nuove interfacce per Timeline e Trigger che espongono solo quei metodi, e invece Cue pubblica quelle interfacce dell'interfaccia completa.

Se il codice dell'applicazione richiede solo poche operazioni su Timeline e Trigger, o solo poche sequenze speciali di operazioni, allora aggiungerei i metodi Cue e nascondi la Timeline e il Trigger contenuti.

    
risposta data 09.08.2013 - 18:16
fonte

Leggi altre domande sui tag