2 Stimmen

Techniken zur Beseitigung von Abhängigkeiten?

Szenario:

Eine Veranstaltung in der Klasse A ausgelöst wird, die von einem Methode in der Klasse B. (derzeit über einen Delegierten)

Die Daten, die von der Veranstaltung zum Methode ist derzeit in Klasse C verpackt.
Dies setzt natürlich voraus, dass die Klasse B von der Klasse C abhängig ist.

Gibt es irgendwelche Techniken/Refactoring, die ich durchführen kann, um diese Abhängigkeit zu entfernen?
z.B. Abrollen der Daten zurück zu einfachen primitiven Datentypen und deren direkte Übergabe.

5voto

Steven A. Lowe Punkte 59247

Abrollen auf Primitive würde funktionieren, aber seien Sie sicher, dass Sie diese Abhängigkeit wirklich entfernen wollen. Es ist durchaus zulässig, dass die Klassen A und B beide von C abhängen, wenn C eine Brücke zwischen ihnen ist, oder wenn C beide speist, usw.

Das Abrollen zu Primitiven entfernt eine Kompilierungsabhängigkeit, aber keine Datenabhängigkeit und kann tatsächlich eine "Denormalisierung" des Entwurfs bedeuten, indem eine Entität (Klasse C) entfernt wird, die logisch erforderlich ist.

2voto

Chris Shaffer Punkte 31499

Ich stimme mit Steven Lowe überein; die Abhängigkeit ist wahrscheinlich gültig. Die einzige Alternative, die ich anbieten kann, ist die Abhängigkeit von einer Schnittstelle anstelle einer tatsächlichen Klasse, aber es läuft so ziemlich auf das Gleiche hinaus.

0voto

Rasmus Faber Punkte 47181

Wie die meisten anderen bereits gesagt haben, ist die Abhängigkeit von C wahrscheinlich gültig.

Wenn jedoch die Abhängigkeit von C zu Problemen führt, könnte es daran liegen, dass C zu kompliziert ist oder zu viele eigene Abhängigkeiten hat.

Wenn die Klasse C in einem Ereignis übergeben wird, sollte sie wahrscheinlich eine POCO-Klasse sein, die keine eigenen Abhängigkeiten hat.

Wenn C eigene komplizierte Methoden hat, ist es gut möglich, dass sie eigentlich in die Klasse A gehören.

0voto

Codewerks Punkte 5684

Haben Sie sich mit Dependency Injection Frameworks wie Structuremap um diese Abhängigkeiten zumindest zu zentralisieren und konfigurierbar zu machen? Ich habe nicht versucht, es mit Ereignissen/Delegate-Typen, aber es ist ein großes Werkzeug, wenn Sie eine Menge von benutzerdefinierten Typen/Schnittstellen um Ihre Schichten übergeben.

-2voto

James Curran Punkte 98228

Sie könnten in XML serialisieren und dann das XML direkt über XPATH lesen (ohne Deserialisierung)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X