16 Dec
2008

Wie man von einem UserControl auf ein anderes zugreift?

 

Am besten gar nicht!

Eine der Standard-Fragen von Foren und Newsgroups scheint mir zu sein wie man von Control A auf Control B zugreift. Oft übergreifend zwischend UserControls welche auf einer WinForm/WebForm eingesetzt wird.

Bei ASP.NET wird dann oft versucht mit FindControl() dass jeweilige Control auf welches man nun unbedingt zugreifen muss zu suchen um dieses dann, sofern gefunden, entsprechend den Vorstellungen zu bearbeiten.

Dann Frage ich mich, ob der Sinn von Objekt-Orientierung in Ansätzen verstanden wurde? Soll dieses UserControl wirklich nur auf dieser speziellen Seite mit eingesetzt werden? Warum dann ein UserControl? Was wird gemacht wenn das UserControl mal auf einer anderen Seite eingesetzt wird? Wird dann je nach Seite entschieden welches andere Control gebraucht wird? und und und.

Warum denn nicht?

Durch die Verwendung eines UserControls erhält man eine potentiell wiederverwendbare Komponente die sich an verschiedenen Stellen einsetzen lässt. Damit dies jedoch funktioniert sollte ein Control so wenig wie möglich von seiner Umgebung wo es eingesetzt wird wissen, am besten gar nichts.

Doch es wird häufig in einem Control direkt auf die Datenbank zugegriffen, aus einem Control wird versucht zu erahnen in welchem Kontext es läuft um Entscheidungen zu treffen. Z.B. ein- und ausblenden von fremden - nicht im Control verwendeten - Controls oder fremden Text zu Modifizieren oder was auch immer nicht im Einflussbereichs der Control liegt.

Damit ist eine Wiederverwendung so gut wie unmöglich und kann direkt sein gelassen werden. Man hat eine sehr enge Kopplung an die Umgebung. Früher oder später knallt einem das Control um die Ohren (falsche Daten, keine Änderung des fremdem Controls etc.), man ärgert sich, schiebt Frust und früher ohne Objektorientierung war eh alles besser.

Ein paar Faustregeln

What Happens in Vegas, stays in Vegas.

  • Es geht das Control nichts an wo die Daten herkommen.
  • Es geht das Control nichts an wo es eingesetzt wird.
  • Es geht das Control nichts an was andere Controls machen
  • Es geht das Control nichts an welche Entscheidungen aufgrund bestimmter Zustände des Controls gemacht werden.
  • Die Steuerung und Reaktion auf ein Control übernimmt eine übergeordnete Instanz wie z.B die Seite auf der das Control verwendet.
  • Es geht die übergeordnete Instanz nichts an was im Control im Detail passiert.
  • Das Control (bzw. dessen Entwickler) entscheidet was für Verwendung wichtig ist und kommuniziert nur dies nach außen.

Die ASP.NET WebControls machen zum Beispiel machen es so, die WinFoms-Controls ebenso auch Control-Libraries arbeiten so. Warum? Damit sie überall eingesetzt werden können. Also spricht doch nichts dagegen die eigenen Sachen auch so zu gestalten.

 

Technorati-Tags: ,,,

Der Eintrag ist mir etwas Wert
 

Feedback

# re: Wie man von einem UserControl auf ein anderes zugreift?

left by Hannes Preishuber at 12/16/2008 12:03 PM Gravatar
das kann ich nur unterstreichen
gilt auch für Silverlight
Ich würde noch den Begriff "Black Box" drunter streuen!

# re: Wie man von einem UserControl auf ein anderes zugreift?

left by Peter Bucher at 12/18/2008 6:44 PM Gravatar
well... done :)
Comments have been closed on this topic.