Fließende Schnittstellen in C #

8

Ich habe eine Frage mit fließenden Schnittstellen.

Wir haben einige Objekte, die als Parameterobjekte für eine SQL-Schnittstelle verwendet werden, hier ein Beispiel:

%Vor%

Für einige dieser Parameter möchte ich einige spezielle Optionen aktivieren, aber anstatt der Int32-Methode (die nur eine von vielen ist) weitere Eigenschaften hinzuzufügen, dachte ich, ich würde fließendere Oberflächen untersuchen. p>

Hier ist ein Beispiel, wo ich hinzugefügt habe, was ich suche:

%Vor%

Ich weiß, dass diese beiden Optionen für diesen Parametertyp keinen Sinn ergeben, aber darum geht es nicht.

Im obigen Fall müsste "Substitute" eine statische Eigenschaft (oder Methode, wenn ich nur ein paar Klammern hinzufüge) für die SqlParameterOption-Klasse sein, während "Precision" eine Instanzmethode sein müsste.

Was ist, wenn ich sie neu anordne?

%Vor%

Dann müsste Ersatz die Instanzeigenschaft und Präzision die statische Methode sein. Dies wird natürlich nicht kompiliert, ich kann weder eine statische noch eine nicht statische Eigenschaft oder Methode mit dem gleichen Namen haben.

Wie mache ich das? Bin ich hier völlig falsch?

Während ich die Frage erneut gelesen habe, hatte ich eine Idee, würde diese andere Syntax unten mehr Sinn machen?

%Vor%

In diesem Fall wären beide Instanzenmethoden auf was auch immer mit Returns, die eine spezialisierte Klasse oder Schnittstelle für SqlParameter-Optionen wie diese wären. Ich bin mir nicht sicher, ob ich den .With Teil ausgeben möchte, da dies alle Methoden des Objekts offenlegt, anstatt nur die fließenden .

>

Ratschläge und einige gute URLs sind sehr willkommen, ich habe viele Beispiele durchforstet, aber sie neigen dazu, Beispiele wie folgt zu zeigen:

%Vor%

(von dieser Seite )

entfernt

Bearbeiten : Folge nach Antworten Von @marxidad :

%Vor%

Bei diesem Ansatz müsste With das Objekt übernehmen und auf den Parameter anwenden. Mir geht es gut.

Wenn ich die Syntax verwenden würde, die ich als Beispiel hinzugefügt habe, wäre das so:

%Vor%

In diesem Fall würde With nicht wissen, wann die Kette endete, also müsste jede Option ihre Wirkung direkt anwenden.

Was ist bevorzugt? Dass die Optionen ein Effektobjekt aufbauen, das später angewendet werden muss oder dass jeder Effekt seinen Effekt direkt anwendet?

Meine Entscheidung : Wie @marxidad sagt, wenn die Änderungen unumkehrbar sind und möglicherweise eine Umkehrung, einen Aufbauzustand und einen Ausfall erfahren könnten Irgendein Punkt mit einer Ausnahme ist der Weg, den ich gehen werde.

In diesem Fall gehe ich jedoch mit einem einfacheren Ansatz vor, der das SqlParameter-Objekt direkt modifiziert.

In diesem Fall sieht mein Code wie folgt aus:

%Vor%

Bearbeiten: Gah, so geht es, wenn ich mich nur auf eine Sache konzentriere.

Ich kann diese Syntax nicht verwenden. Ich gehe wie folgt vor: @marxidad :

%Vor%

Der Grund ist natürlich, dass die Methode, die das SqlParameter-Objekt als Argument akzeptiert, das von With zurückgegebene Objekt nicht bewältigen kann. Obwohl das SqlParameter-Objekt ordnungsgemäß erstellt und eingerichtet wurde, wurde es mit der beabsichtigten Verwendung nicht kompatibel.

    
Lasse Vågsæther Karlsen 20.10.2008, 10:40
quelle

2 Antworten

8

SqlParameterOption's Methoden können alle Instanzmethoden sein, die dasselbe Objekt zurückgeben:

%Vor%

Re: Aufbau des Zustands, der später angewendet wird, oder direkt bei jedem Aufruf anwenden , wenn es in keinem Fall wirklich irreversible Nebenwirkungen gibt, dann spielt es keine Rolle und es liegt an Ihnen persönlicher Geschmack. Wenn die Optionen bei jedem Methodenaufruf festgelegt sind und Sie die Möglichkeit haben, dies rückgängig zu machen, möchten Sie möglicherweise zuerst den Status erstellen und dann anwenden. Wenn das Parameterobjekt die Validierung zwischen Eigenschaften für Sie vornimmt, während Sie sie anwenden, ist es möglicherweise besser, mit der direkten Anwendung zu gehen, damit Sie die Validierungsrückmeldung richtig erhalten.

    
Mark Cidade 20.10.2008, 10:51
quelle
1

Sie können jedoch überladene Methoden haben. Zum Beispiel, wenn es Ersatz () war. Normalerweise können Sie nicht sowohl statische als auch Instanzversionen einer Methode verwenden, aber Erweiterungsmethoden können von Nutzen sein ... aber wenn die zwei Versionen von Ersatz unterschiedliche Bedeutungen haben, wäre es sauberer, einfach verschiedene Typen zurückzugeben dass die zwei Varianten von Substitute () nicht in Konflikt stehen können.

    
Marc Gravell 20.10.2008 10:52
quelle

Tags und Links