2008-09-05 14 views
10

Ich entwerfe ein neues System und ich habe viele Schnittstellen, die im Laufe der Zeit mit dem System wachsen werden. Was ist die beste Praxis dieseSchnittstellen und Versionierung

Schnittstellen zu nennen
ISomethingV01 
ISomethingV02 
etc 

und ich tun, um diese

public interface ISomething{ 
     void method(); 
} 

dann muss ich 2-Methode hinzufügen, so jetzt, was ich tun?

public interface ISomethingV2:ISomething{ 
     void method2(); 
} 

oder gleich andere Art?

Antwort

5

Im Idealfall sollten Sie Ihre Schnittstellen nicht sehr oft ändern (wenn überhaupt). Wenn Sie eine Schnittstelle ändern müssen, sollten Sie ihren Zweck überdenken und prüfen, ob der ursprüngliche Name weiterhin für sie gilt.

Wenn Sie immer noch das Gefühl haben, dass sich die Schnittstellen ändern und die Schnittstellenänderungen klein sind (Hinzufügen von Elementen) und Sie die gesamte Codebasis kontrollieren, sollten Sie nur die Schnittstelle modifizieren und alle Kompilierungsfehler beheben.

Wenn Ihre Änderung eine Änderung in der Art der Verwendung der Schnittstelle ist, müssen Sie eine separate Schnittstelle (am wahrscheinlichsten mit einem anderen Namen) erstellen, um dieses alternative Verwendungsmuster zu unterstützen.

Auch wenn Sie am Ende ISomething, ISomething2 und ISomething3 erstellen, werden die Konsumenten Ihrer Schnittstellen es schwer haben herauszufinden, welche Unterschiede zwischen den Schnittstellen bestehen. Wann sollten sie ISomething2 verwenden und wann sollten sie ISomething3 verwenden? Dann müssen Sie den Prozess der Versoldaten von ISomething und ISomething2 gehen.

2

Der Zweck einer Schnittstelle besteht darin, ein abstraktes Muster zu definieren, das am Typ implementiert werden muss.

Es wäre besser umsetzen als:

public interface ISomething 

public class Something1 : ISomething 
public class Something2 : ISomething 

Sie durch die Erstellung mehrerer Versionen der gleichen Schnittstelle nicht alles in Form von Code-Wiederverwertbarkeit oder skalierbare Design gewinnen.

2

Ich weiß nicht, warum Leute Ihren Beitrag ablehnen. Ich denke, dass gute Benennungsrichtlinien sehr wichtig sind.

Wenn Sie die Kompatibilität mit prev beibehalten müssen. Version der gleichen Schnittstelle in Betracht ziehen, Vererbung zu verwenden. Wenn Sie eine neue Version von Schnittstelle folgende Regel betrachten einzuführen:

Versuch sinnvoll Suffix Sie Schnittstelle hinzuzufügen. Wenn es nicht möglich ist, einen übersichtlichen Namen zu erstellen, können Sie die Versionsnummer hinzufügen.

4

Ich stimme zu Garo Yeriazarian, Änderung der Schnittstelle ist eine ernste Entscheidung. Wenn Sie die Verwendung einer neuen Version der Benutzeroberfläche fördern möchten, sollten Sie die alte Version als veraltet markieren. In .NET können Sie ObsoleteAttribute hinzufügen.

6

Ich denke, dass Sie Interfaces übersteuern.

Meyer und Martin sagten uns: "Offen für Erweiterung, aber geschlossen für Modifikation!"

und dann Cwalina (et al) bekräftigt:

Von Framework Design Guidelines ...

Im allgemeinen Klasse das bevorzugte Konstrukt zur Belichtung Abstraktionen ist Der Hauptnachteil von Schnittstellen. ist , dass sie viel weniger flexibel sind als Klassen, wenn es darum geht, Entwicklung von APIs zu ermöglichen.Sobald Sie eine Schnittstelle versenden, ist der Satz seiner Mitglieder für immer fixiert Ergänzungen an der Schnittstelle würde bestehende Typen brechen, die die Schnittstelle implementieren.

Eine Klasse bietet viel mehr Flexibilität. Sie können Mitglieder zu Klassen hinzufügen, die bereits versendet haben. Solange die Methode nicht abstrakt ist (d. H. So lange wie Sie eine Standard- Implementierung des Verfahrens bereitstellen), werden alle vorhandenen abgeleiteten Klassen weiterhin unverändert bleiben .

alt text