Esiste un caso valido per due componenti che dipendono l'uno dall'altro?

3

Le dipendenze sono servizi richiesti da un oggetto per svolgere le sue responsabilità. Nel contesto OOP può essere pensato come un parametro in un costruttore.

Nella mia esperienza, non ho mai trovato un caso per una dipendenza ciclica A <--> B valida. Ogni volta che trovo questo risulta essere uno dei due casi:

  • A e B dovrebbero in realtà essere un singolo componente ( AB )
  • uno dei componenti viola il principio di responsabilità singola e dovrebbe essere diviso in elementi separati ( A1 --> B --> A2 )

Per essere chiari, non sto parlando di cicli negli oggetti usati per le strutture dati. Sono interessato a componenti che forniscono comportamenti e collaborano tra loro.

    
posta Jonas 26.03.2014 - 21:46
fonte

1 risposta

5

Questa è solo una profezia che si autoavvera - ogni volta che trovi una dipendenza ciclica A < - > B dove né A né B possono essere scomposti in componenti più piccoli, questo ti dà un argomento sorprendente per avere A e B da combinare a singolo componente (AB). Finché discuti in quel modo, ovviamente non puoi arrivare a una conclusione diversa.

Prendiamo un esempio del mondo reale: Microsofts Scripting Runtime . Questa libreria contiene componenti "File" e "Cartella". Ogni file ha una cartella principale e ogni cartella può contenere un elenco di file. Quindi abbiamo effettivamente una dipendenza ciclica. Questi due componenti possono essere suddivisi in quelli più piccoli? Immagino non senza cambiare l'intera semantica. Hanno un comportamento? Naturalmente, nel file system ci sono degli oggetti che possono essere cancellati, interrogati, verificati per esistenza, spostati e così via. Dovrebbero essere combinati in un unico componente più grande? Bene, in un certo senso lo sono già, fanno entrambi parte della parte FileSystemObject di Scripting Runtime e non puoi fare riferimento e utilizzare solo un componente File o Cartella. Ma ora questo si riduce solo al tuo punto di vista: su un livello di astrazione, questi due oggetti sono componenti diversi da soli, su un altro non lo sono. E puoi prendere questo come prova della tua ipotesi o di una confutazione, qualunque cosa ti piaccia.

    
risposta data 26.03.2014 - 22:31
fonte

Leggi altre domande sui tag