InternalsVisibleToAttribute indica un cattivo odore di progettazione?

4

Ogni volta che ho utilizzato InternalsVisibleToAttribute durante lo sviluppo di un'API, sembra un po 'puzzolente. Come l'API non viene progettata in modo veramente incapsulato. Molte volte questo è fuori dai limiti di tempo - esporre le funzionalità interne in un modo elegante e incapsulato richiede tempo e molte volte solo un altro assembly ne avrà bisogno, rendendo InternalsVisibleToAttribute come la soluzione corretta.

InternalsVisibleToAttribute indica un odore di design, come un caso di refactoring andato male, o un'indicazione che i due gruppi non dovrebbero essere separati?

Nota: comprendo la necessità di utilizzare InternalsVisibleToAttribute per il test delle unità. Questa domanda non si riferisce al test dell'unità.

    
posta Mr Anderson 30.08.2016 - 18:15
fonte

1 risposta

3

Un utilizzo tipico di InternalsVisibleToAttribute è quando sei un venditore di componenti o librerie come Microsoft e produci componenti per altri clienti. Quindi probabilmente vorrai creare un'API ben ristretta per i tuoi clienti e non esporrli più del necessario per loro (perché ogni metodo API pubblico comporta un potenziale rischio di "interruzione delle modifiche" più avanti quando distribuisci le nuove versioni).

Per affrontare questo caso, puoi rendere quasi tutti i metodi "pubblici" inizialmente del tuo sistema componente interno, usare InternalsVisibleToAttribute per esporre i metodi interni ad altre librerie del tuo sistema di librerie e impostare solo i metodi API esterni per pubblico.

Quindi per questa situazione (oltre ai test unitari) l'uso di InternalsVisibleToAttribute è IMHO chiaramente non un odore di codice. Per altri casi, beh, almeno dovresti pensarci due volte prima di usarlo, questo dipende sicuramente dal caso.

    
risposta data 30.08.2016 - 20:36
fonte

Leggi altre domande sui tag