Wie könnte man einen Code umstrukturieren, der in verschachtelte Usings involviert ist?

9

Ich habe einen Code, der sehr viele Duplikate enthält. Das Problem kommt von der Tatsache, dass ich mit verschachtelten IDisposable -Typen zu tun habe. Heute habe ich etwas, das aussieht:

%Vor%

Der gesamte verschachtelte using -Block ist für jede dieser Methoden gleich (zwei werden angezeigt, aber es gibt ungefähr zehn davon). Das einzige, was anders ist, ist, was passiert, wenn Sie auf die innere Ebene der Blöcke using gelangen.

Eine Art, wie ich dachte, wäre, etwas in der Art von:

zu tun %Vor%

Das funktioniert, es ist nur irgendwie klobig (als Mensch) zu analysieren. Hat jemand andere Vorschläge, wie man die Code-Duplizierung um verschachtelte using -Blöcke reduzieren könnte? Wenn sie nicht IDisposable wären, würde man wahrscheinlich nur eine Methode erstellen, um die Ergebnisse zurückzugeben von b.GetC(innerId) ... aber das ist hier nicht der Fall.

    
ckittel 23.04.2012, 17:43
quelle

4 Antworten

1

Ich mag die Antwort von BFree als Anfang, aber ich würde ein paar Änderungen vornehmen.

> %Vor%

Danach können Sie etwas tun wie:

%Vor%

Beachten Sie, dass MyCompositeDisposable wahrscheinlich try / finally-Blöcke im Konstruktor und Dispose-Methoden haben muss, damit Fehler bei der Erstellung / Vernichtung dafür sorgen, dass nichts zu Ende geht.

    
Servy 23.04.2012, 18:16
quelle
1

Im Rx-Framework gibt es eine Klasse namens CompositeDisposable Ссылка

Sollte nicht zu schwer sein, um Ihre eigene (wenn auch sehr abgespeckte Version) zu rollen:

%Vor%

Dann sieht das etwas sauberer aus:

%Vor%     
BFree 23.04.2012 17:52
quelle
1

Sie können immer einen größeren Kontext festlegen, um zu verwalten, welche Objekte erstellt / entfernt werden sollen. Schreiben Sie dann eine Methode, um diesen größeren Kontext zu erstellen ...

%Vor%

Dann benutze es:

%Vor%     
Amy B 23.04.2012 18:19
quelle
0

Wenn Ihre Dispoable -Typen alle verfügbaren Mitglieder korrekt entsorgen, benötigen Sie nur eine using-Anweisung.

Zum Beispiel:

%Vor%

könnte dies werden, wenn a hatte Mitglieder von Typ b und c, und eine entsorgt von b und c in seiner Methode entsorgen:

%Vor%

Sie müssten Ihre Fabrik ändern, um b und c in a einzugeben, jedoch.

    
jrummell 23.04.2012 17:45
quelle