Interfacce e versioni
-
09-06-2019 - |
Domanda
Sto progettando un nuovo sistema e ho molte interfacce che cresceranno nel tempo con il sistema.Qual è la procedura migliore per denominare queste interfacce
ISomethingV01
ISomethingV02
etc
e lo faccio
public interface ISomething{
void method();
}
quindi devo aggiungere il metodo 2 quindi ora cosa faccio?
public interface ISomethingV2:ISomething{
void method2();
}
o nello stesso altro modo?
Soluzione
Idealmente, non dovresti cambiare le tue interfacce molto spesso (se non del tutto).Se hai bisogno di cambiare un'interfaccia, dovresti riconsiderarne lo scopo e vedere se il nome originale è ancora applicabile ad essa.
Se ritieni ancora che le interfacce cambieranno e che le modifiche alle interfacce sono piccole (aggiunta di elementi) e hai il controllo dell'intera base di codice, allora dovresti semplicemente modificare l'interfaccia e correggere tutti gli errori di compilazione.
Se la modifica riguarda il modo in cui deve essere utilizzata l'interfaccia, è necessario creare un'interfaccia separata (molto probabilmente con un nome diverso) per supportare quel modello di utilizzo alternativo.
Anche se finisci per creare ISomething, ISomething2 e ISomething3, i consumatori delle tue interfacce avranno difficoltà a capire quali sono le differenze tra le interfacce.Quando dovrebbero usare ISomething2 e quando dovrebbero usare ISomething3?Quindi devi intraprendere il processo di obsolescenza di ISomething e ISomething2.
Altri suggerimenti
Penso che tu stia sovraccaricando le interfacce.
Meyer e Martin ci hanno detto:"Aperto per estensione ma chiuso per modifica!"
e poi Cwalina (et al) ha ribadito:
Dalle linee guida per la progettazione del framework...
In generale, le classi sono il costrutto preferito per l'esposizione delle astrazioni.Lo svantaggio principale delle interfacce è che sono molto meno flessibili delle classi quando si tratta di consentire l'evoluzione delle API.Una volta spedito un'interfaccia, il set dei suoi membri è fissato per sempre.Eventuali aggiunte all'interfaccia interromperebbero i tipi esistenti che implementano l'interfaccia.
Una classe offre molta più flessibilità.Puoi aggiungere membri a lezioni che sono già state spedite.Finché il metodo non è astratto (cioè, fintanto che si fornisce un'implementazione predefinita del metodo), eventuali classi derivate esistenti continuano a funzionare invariati.
Sono d'accordo con Garo Yeriazarian, cambiare interfaccia è una decisione seria.Inoltre, se desideri promuovere l'utilizzo della nuova versione dell'interfaccia, devi contrassegnare la vecchia versione come obsoleta.In .NET puoi aggiungere Attributo obsoleto.
Lo scopo di un'interfaccia è definire un modello astratto che in tipo deve essere implementato.
Sarebbe meglio implementare come:
public interface ISomething
public class Something1 : ISomething
public class Something2 : ISomething
Non si ottiene nulla in termini di riusabilità del codice o progettazione scalabile creando più versioni della stessa interfaccia.
Non so perché le persone svalutano il tuo post.Penso che siano buone linee guida per la denominazione molto importante.
Se è necessario mantenere la compatibilità con la versione precedente.versione della stessa interfaccia considera l'utilizzo dell'ereditarietà.Se è necessario introdurre una nuova versione dell'interfaccia, considerare la seguente regola:
Prova ad aggiungere un suffisso significativo alla tua interfaccia.Se non è possibile creare un nome conciso, prendi in considerazione l'aggiunta del numero di versione.