Classi di alto livello e classi di basso livello [duplicato]

4

Ho visto su SOLID che esiste un principio Principio di inversione delle dipendenze .

Ho anche notato che: Le classi di alto livello non dovrebbero dipendere dalle classi di basso livello, ma entrambe dovrebbero dipendere dalle astrazioni.

Che cosa significa esattamente Classi di alto livello e Di basso livello ?

    
posta Shmwel 05.05.2014 - 08:42
fonte

2 risposte

3

Le classi di basso livello sono semplici operatori che eseguono azioni, mentre le classi di alto livello sono la classe di gestione che orchestra le classi di basso livello.

Ad esempio, se hai una classe che legge i byte da un file e una classe che calcola il CRC dei byte, sono classi di basso livello perché ognuno esegue un'azione. Se hai una classe che usa queste due classi per calcolare il CRC di un file, è una classe di alto livello, perché gestisce le altre classi per svolgere un compito più grande.

DiP dice che la classe di alto livello non dovrebbe dipendere direttamente dalle classi di basso livello, ma piuttosto ottenere oggetti di quelle classi (o oggetti di fabbrica che li creano) iniettati in essa e dipendere da interfacce più generiche - per esempio, un interfaccia per classi che leggono byte e un'interfaccia per classi che aggregano byte. Che la classe di livello superiore, invece di eseguire semplicemente CRC sui file, potrebbe anche eseguire MD5 su URL o qualsiasi altro tipo di aggregazione su qualsiasi altro tipo di origine dati.

Ricorda che ci sono più di due livelli. La classe di alto livello dell'esempio può essere un componente di basso livello per una classe di livello ancora superiore, che esegue un'attività più complessa.

Un'altra cosa da tenere a mente è che, come qualsiasi altra regola, DiP non dovrebbe essere seguito ciecamente. Ho spiegato in un'altra risposta che alcune classi di basso livello sono troppo piccole per essere disgiunte. Inoltre, ad un certo punto dovrai fare riferimento alle classi di basso livello direttamente dalle classi di alto livello. Classi di alto livello a cui vengono iniettati oggetti di basso livello - chi fa l'iniezione? Classi di livello ancora più alto! Ciò significa che in alcuni punti le classi di alto livello devono utilizzare direttamente le classi di basso livello. Il tuo metodo principale è il più alto che c'è, e non puoi iniettare nulla in esso. Ciò non significa che dovresti fare tutte le iniezioni nel metodo principale: decidere dove scegliere le classi concrete di basso livello è parte del processo di progettazione.

    
risposta data 05.05.2014 - 09:32
fonte
2

Mi piace molto la spiegazione in questo articolo: DIP allo stato selvatico .

Per riassumere il livello superiore e il livello basso sono in relazione al modello di dominio. Ad esempio, la creazione di report è di alto livello mentre i dati per quel report e la stampa di tali dati sono operazioni di basso livello.

    
risposta data 05.05.2014 - 09:13
fonte

Leggi altre domande sui tag