Ich versuche ein Framework zu erstellen, das es Menschen ermöglicht, unsere Kernfunktionalität durch die Implementierung einer Schnittstelle zu erweitern. Unten ist ein dumbed down-Beispiel für diese Schnittstelle.Methode Parameter vs Parameter Objekt
public interface MyInterface
{
IData GetData(string p1, char p2, double p3);
}
Vor kurzem haben wir beschlossen, diese Schnittstelle zu ändern (Ich weiß, ich soll nicht abhängig Code brechen, aber die Wahrheit ist, dass wir diese Schnittstelle implementieren noch keine dritten Parteien haben, so haben wir eine Chance für ein "Do-Over", um diese Schnittstelle korrekt zu implementieren).
Wir müssen dieser Schnittstelle zwei weitere Parameter hinzufügen, damit unsere Software korrekt funktioniert. Zwei Möglichkeiten, wir denken von hinzufügen, sie nur auf die Signatur wie folgt aus:
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, bool p4, DateTime p5);
}
oder durch die Schaffung eines Parameter-Objekt wie dieses
public class MyParameters
{
public bool p4 { get; set; }
public DateTime p5 { get; set; }
}
und das Hinzufügen von ihnen bis zum Ende des Verfahrens wie so :
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, MyParameters p4);
}
ich bin für eine Art von Führung, auf dem Weg, um die „die meisten“ richtigen Weg zu gehen. Ich kann Pro und Contra in beiden Kategorien sehen, aber ich möchte nicht, dass meine Vorurteile mich auf den falschen Weg führen.
Einige meiner wichtigsten Anliegen sind:
- Erweiterbarkeit der Software - ich möchte der Benutzer in der Lage sein zu tun, was ich noch nicht gedacht haben, durch die Schnittstelle
- Wartbarkeit Implementierung - Idealerweise ich möchte nie den Code zu berühren haben, die für den Aufruf von GetData() erneut
- Saubere API verantwortlich ist - ich will nicht die Lösung, die ich bei Ankunft zu einem 3rd-Party-Entwickler machen erschaudern
Ich weiß nicht einmal, welche Frage ich online stellen sollte, um Anleitungen für dieses Problem zu erhalten. Ich habe das Gefühl, dass die Antwort "hängt davon ab" (auf Dinge wie wie p1-p5 zu dem Zweck der GetData() -Funktion), aber kann jemand mich auf eine Liste von Fragen zeigen, die ich bitten sollte, um mich zu bewerten ob eine Lösung besser ist als die andere?
Hört sich gut an, eine Schnittstelle für den Parametertyp zu haben, aber bedenken Sie, dass die Schnittstellen nicht versioniert werden können. Wenn sich die API ausbreitet, kann niemand dem Parametertyp zusätzliche Funktionalität hinzufügen (ohne einen weiteren Parameter hinzuzufügen) Codes. –