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?

È stato utile?

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.

alt text

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top