Frage

Ich bleibe ein paar Bibliotheken für andere Menschen. Nachdem für jeden von ihnen durch ein paar Releases gegangen, gibt es einige Dinge, die ich anders machen würde, wenn ich sie wieder zu tun hatte, über.

Die Frage ist: Soll ich tun, um sie über? Ich denke, wir alle, dass Dilemma - wie die Hilfsbereitschaft der Wartungsaktivität im Vergleich zu den störenden Auswirkungen des Wandels zu balancieren.

Offensichtlich für Fehler ist die Änderung zwingend notwendig. Kein Dilemma gibt. Für neue Features, ist es eine Frage der Nützlichkeit im Vergleich zu zusätzlicher Komplexität. Ich fühle mich wohl mit dieser Frage beschäftigen.

Es ist der Fuzzy-Raum zwischen Bugfix und neuer Funktion, über die ich zu fragen. Ein Beispiel dafür ist die Wartung mit Rahmen-Design-Richtlinien oder CLS-Kompatibilität zu erfüllen. Für eine Bibliothek, schrieb ich es ohne Gedanken an CLS-Kompatibilität, und dann bat die Leute dafür. Als Ergebnis hatte ich die Schnittstelle ändern uint für int zu tauschen. Das ist eine disruptive Veränderung, für wenig Gewinn (für die meisten Menschen).

Ein weiteres Problem: FxCop Compliance. Ich musste Änderungen in param Namen für einige Methoden machen, machen FxCop glücklich. Aber diese Veränderungen wirklich nur Auswirkungen auf Menschen mithilfe von Reflektion - die Typen nicht ändern, nur die Namen des params.

Das Problem, das ich mit jetzt zu tun habe ist: Rahmen-Design-Richtlinien. Die Richtlinien in Bezug auf Ereignisse sagen, dass Ereignisse sollten eine Signatur mit zwei Argumenten haben: (Object Quelle, EventArgs e). Aber ich war nicht anwesend an diesem Tag in meinem Framework-Entwurf course;). Die Ereignisse in meiner Bibliothek nehmen zur Zeit nur ein einziges Argument EventArgs.

Ich füge nun neue Ereignisse in die Bibliothek. Sollten die neuen Ereignisse, die Rahmen-Design-Richtlinien folgen? oder das Muster bereits in der Bibliothek festgelegt? Wenn ich die Design-Richtlinien für die neuen Ereignisse verwenden, sollte ich die vorhandenen Ereignisse ändern, um auch mit den Design-Richtlinien zu entsprechen? Und wenn ja, wie die Migration zu tun? Sollte ich die [Obsolete] Attribut? Wie viele Versionen?

Generell Ich habe Interesse an Gedanken über die Wartung in diesem Fuzzy-Bereich zwischen Bugfix und neuer Funktion.

War es hilfreich?

Lösung

Anstatt den alten Code zu modifizieren deprecate es. Beginnen Sie Ihren neuen Code mit der richtigen Konstruktion und Schreibersatzcode für die Stücke der alten Design. schließlich werden Sie mit einem System alle mit der richtigen Konstruktion am Ende, aber es wird nicht sehr störend Veränderung sein.

Andere Tipps

Sie haben auf jeden Fall eine Menge zu kommunizieren, wenn Sie planen, zu brechen, Änderungen vorzunehmen. Auch wenn Sie Ihre Bibliotheken als Version neu gestartet wird 2 Sie müssen Ihre Benutzer sagen, dass Version 1 wird erst in der Zukunft bugfixed und Sie werden für die Version 2 Entwicklung zusteuern, wo sie alle neuen Funktionen finden können.

Aber ich denke, dass ich diesen Weg gehen würde. Unterstützung Version 1 für Fehlerbehebung und Port eine neue Version 2 für die Bruch Änderungen.

Wenn ich versuche, einige Richtlinien zu folgen, die ich vorher nicht folgen hätte, werde ich in dem neuen Code tun. Für vorhandenen Code, ich werde sie beheben, wenn sie nicht gebrochen werden. Aber wenn Sie einige Fehler in bestehendem Code finden, ist es gute Praxis, die Leitlinien anzuwenden, während der Fehler in der gleichen Zeit fixiert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top