Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...
Wie böse ist RAD?

Jeder der mich kennt, weiß, dass ich keine Freund von RAD-Controls (Rapid Application Developement) – besonders von Controls und Tools diverser Drittanbietern – bin.

Aber halte ich RAD deshalb generell böse?

Ralf Westphal schreib im aktuellen Beitrag seiner Kolumne “Sandbox” (in der dotnetpro 4/2010) sinngemäß und zusammengefasst: RAD-Tools für sich gesehen sind nicht böse, sondern die naive Herangehensweise, also zu glauben, dass RAD alle Probleme erledigt, ist böse, bzw. schlecht und die daraus resultierenden Probleme werfen ein schlechtes Licht auf RAD.

Ist das wirklich so?

Generell kann ich die Frage leider nicht komplett beantworten. Sondern nur aus meiner Sicht als Webentwickler, auf RAD-Tools und RAD-Controls für ASP.NET. Ich kann mich also nur auf ASP.NET beziehen und weis nicht wie es sich bei WinForms, WPF und SilverLight verhält.

So wie Ralf es beschreibt, würde ich generell erst mal “Ja” sagen, aber aus meiner Sicht kommen einige Fragen hinzu. Warum gibt es denn überhaupt die Möglichkeit, dass man sich bei naiver Herangehensweise seine komplette Anwendung mit RAD-Tools und RAD-Controls versauen kann? Warum schaffen es die Anbieter nicht, einfache, kleine und flexible Tools zu schaffen mit denen man nicht viel falsch machen kann? Warum müssen alle möglichen, erdenkbaren Funktionen von Anfang an in einem RAD-Tool, bzw. RAD-Control enthalten sein?

Schöne und positive Beispiele kommen von Microsoft selber: LINQ to SQL; die ASP.NET Controls GridView und Calendar sind absolut flexibel beliebig erweiterbar. Es ist also generell machbar.

Zu großer Umfang

Müssen RAD-Tools und drittanbieter-Controls so viele Funktionen anbieten, das der naive Nutzer alle Möglichkeiten ausnutzen will? Anbieter von RAD-Tools wollen die breite Masse zufrieden stellen und stellen deshalb die eierlegende Wollmilchsau zur Verfügung. Das muss aber nicht sein, ganz im Gegenteil. Ich persönlich nutze lieber die kleine Schlanke Komponente die ich selber erweitern kann und nicht das Universal-Tool von dem ich 80% nicht benötige, aber mit schleifen muss.

Unförmiger HTML Code

Wer meinen UG-Vortrag im Herbst (beim .NET-Stammtisch Konstanz-Kreuzlingen) gesehen hat, konnte miterleben wie sich die verschiedenen Hersteller bei der Menge an HTML-Code, JavaScripts und HTML-Verschachtelungen überboten haben. (Ich bin gerne bereit diesen Vortrag auch in einer anderen UGs zu halten. Machen Sie sich dabei auf was gefasst *fg*)

Ein namhafter Hersteller von RAD-Controls zwingt die Browser in die Knie, wenn man mehr als 10 abhängige Comboboxen nutzt, die unter anderem Grids beinhalten. Eine Combobox dieses Anbieters benötigt für 10 Listeneinträge übrigens mehrere ineinander verschachtelte HTML-Tabellen und mehr als 30 Zeilen HTML-Code. Nutzt man zusätzlich noch die Möglichkeit, beim Aufklappen der Combobox ein Grid anzuzeigen, erhöht sich die Menge des benötigten HTML-Codes um die benötigte Menge des Grids, welches auch nicht gerade sparsam mit verschachtelten HTML-Tabellen umgeht. Hinzu kommen Unmengen von JavaScripts, die direkt auf der Seite ausgegeben werden. Die kleine Combobox entpuppt sich bei genauerer Betrachtung als ein riesiges, unperformates und überladenes Control.

Ein weiterer Hersteller hatte es übrigens nicht geschafft, trotz enormer Mengen an unsauberen Code und JavaScripts, die Combobox in allen Browsern zu funktionieren: Im Opera war lediglich eine leere Standard-Combobox zu sehen.

Zu unflexibel und schlecht erweiterbar

Warum schaffen es die meisten Hersteller von RAD-Tools und drittanbieter-Controls nicht, flexible und erweiterbare Tools und Controls zu erstellen?

In einer Kalender-Komponente eines weiteren namhaften Herstellers, benötigte ich zwei Wochen, um ein Doppelklick-Event auf einen Kalendertag abzufangen und einen eigenen Termindialog anzubinden.

  • Warum ich nicht den vorhandenen Dialog genutzt habe?
    Dieser Passte nicht zu der Art von Terminen war nur schwer erweiterbar und passte nicht in das Layout.
  • Warum ich nicht die Komponente eines anderen Herstellers genommen habe?
    Alle anderen waren aufgrund von unsauberen HTML-Code einfach zu unperformant beim Aufbau der Seite, zudem schaffte es das herstellereigene JavaScript nicht mal mehr die per Callback geholten Termine in diesen unmöglichen Code zu setzen.

Grund hier war eine nicht dokumentierte, clientseitige JavaScript API und das tagelange JavaScript-Debugging in unschönem Code.

Fazit

Es ist nicht nur alleine die Naivität der, Nutzer sondern auch die Art wie die Hersteller die Controls produzieren und vermarkten. Auf den Demoseiten der Hersteller sieht alles toll und bunt aus, alles funktioniert einwandfrei, aber dort habe ich auch nie mehr als zehn abhängige Grid-Comboboxen gesehen ;-)

Man RAD-Controls ist man unheimlich schnell bei der Entwicklung von schönen, bunten und benutzerfreundlichen Oberflächen.

Mit RAD-Controls stößt man aber auch unheimlich schnell auf Probleme, wenn man spezielle Anforderungen hat und wenn man Anpassungen und Erweiterungen an den Controls vornehmen möchte. RAD-Controls werden als schnell einsetzbare Tools präsenteiert, aber unter den schönen bunten Oberfläche erweisen sich die meisten als unflexibel, schlecht dokumentiert und unperformant.

Klingt jetzt wahnsinnig abwertend, gell?

Aber ich möchte RAD-Controls nicht generell schlecht machen. Wenn man keine sehr speziellen Anforderungen an z. B: Grid und Kalender-Controls hat, kann und sollte man diese auch nutzen. Der Entwicklungsaufwand um selber eine entsprechendes Control zu schreiben ist einfach zu hoch.

Nur warum sollte man eine TextBox, eine ComboBox, eine CheckBox, etc. von einem Drittanbieter verwenden? Wegen dem schönen Design? Wohl kaum, denn dafür gibt es CSS.

Wegen einer speziellen Funktion mehr? Eine Funktion ist schnell selber geschrieben. Oder man benutzt vorhandene JavaScript-Frameworks, wie z. B. jQuery, um Controls zu erweitern ohne den HTML-Code aufzublähen und die Browser in die Knie zu zwingen.

Im Gegenteil halte ich RAD für absolut Sinnvoll und sollte auf alle Fälle in Betracht gezogen werden, wenn es darum geht den Aufwand klein zu halten. Allerdings hat Ralf absolut recht, wenn man die meisten, heute auf dem Markt befindlichen RAD-Tools anschaut, sollte, bzw. darf man nicht naiv daherkommen und einfach so alle möglichen Tools einsetzen und nutzen, sondern sollte sich penibel mit den Tools auseinandersetzen, abwägen und schauen wie erweiterbar und flexibel die Controls und Tools wirklich sind.

Zu guter Letzt:

Ich kann es einfach nicht lassen und muss hier mal ein anonymisiertes Beispiel posten.

Es soll ein schöner, bunter, formatierter Button angezeigt werden:

<table cellpadding="0" cellspacing="0" style="height: 57px;">
  <tr>
    <td>
      <table cellspacing="0" cellpadding="0" id="ctl00_phContent_BackgroundImageTextGroupBox_Button1" border="0" style="height:30px;width:90px;border-collapse:collapse;border-collapse:separate;">
        <tr>
          <td id="ctl00_phContent_BackgroundImageTextGroupBox_Button1_B" align="center" style="color:White;background-image:url(Images/Wine/normal.jpg);cursor:pointer;padding-bottom:2px;">
            <div id="ctl00_phContent_BackgroundImageTextGroupBox_Button1_CD" class="dxb">
              <span>Submit</span>
            </div>
          </td>
          <td style="width:0%;">
            <input value="" onfocus="ButtonGotFocus('ctl00_phContent_BackgroundImageTextGroupBox_Button1')" name="ctl00$phContent$BackgroundImageTextGroupBox$Button1" type="submit" style="background-color:Transparent;border-width:0px;height:0px;width:0px;padding:0px;" />
          </td>
        </tr>
      </table>
<script id="dxss_202605327" type="text/javascript">
<!--
addHoverItems('ctl00_phContent_BackgroundImageTextGroupBox_Button1',[[[''],['padding-bottom:2px;color:#FAD9E0;background-image:url(Images/Wine/hover.jpg);'],['B'],['','TC'],[['']],['Img']]]);
addPressedItems('ctl00_phContent_BackgroundImageTextGroupBox_Button1',[[[''],['padding-bottom:2px;color:#DCB7C8;background-image:url(Images/Wine/pressed.jpg);'],['B'],['','TC'],[['']],['Img']]]);
var o = new ClientButton('ctl00_phContent_BackgroundImageTextGroupBox_Button1');
window['ctl00_phContent_BackgroundImageTextGroupBox_Button1'] = o;
o.uniqueID = 'ctl00$phContent$BackgroundImageTextGroupBox$Button1';
addSelectedItems('ctl00_phContent_BackgroundImageTextGroupBox_Button1',[[['bf'],[''],['CD']]]);
o.InlineInitialize();
//-->
</script>
    </td>
  </tr>
</table>

Die “alternative” mit normalem HTML würde so aussehen:

<input type="submit" value="Submit" class="beautifulButton" id="submitButton" runat="server" />

Formatiert mit CSS und ggf. erweitert per jQuery und man hat ein besseres Ergebnis, da der HTML-Code schlanker ist und die Browser weniger zeit für die Verarbeitung benötigen.

DotNetKicks-DE Image
Posted: Montag, 15. März 2010 13:42 von Jürgen Gutsch
Abgelegt unter: , , , ,

Kommentare

AZeitler sagte:

Wir sind wieder beim Thema Qualität / Klasse statt Masse / den Kunden wirklich zuhören ;-)

Solange es aber Kunden, sprich Entwickler / Softwarefirmen gibt, die den Schrott kaufen, weil sie selbst nur einen niedrigen Qualitätsanspruch haben (um es vorsichtig auszudrücken), werden weiterhin solche RAD-Tools am Markt erfolgreich sein.

# März 15, 2010 13:58

schaedld sagte:

Guter Beitrag Jürgen

Kann es sein dass Du von Infragistics redest :-) Wir haben diese RAD's auch bei uns im Einsatz und ich bin eigentlich der einzige der "nur" die Standarcontrols verwendet, was bis jetzt immer gereicht hat.

Gruss

Daniel

# März 15, 2010 14:29

Jürgen Gutsch sagte:

Hallo Daniel,

vielen Dank für dein Lob :-)

Eigentlich meine ich alle namhaften Hersteller von RAD-Controls, aber die sind auch dabei.

Gruß

Jürgen

# März 15, 2010 14:44

dbischof sagte:

Hallo Jürgen,

du sprichst mir da fast aus der Seele. Ich hatte zum Glück schon ein Projekt an die Wand gefahren, weil ich zu sehr auf Drittanbieter Komponenten gesetzt habe.

In der Spielebranche würde man wohl RAD-Controls als Casual Game beschimpfen.

Sehr schön gefällt mir der erste Satz aus Wikipedia zu Casual Games: "Casual Games (engl. Gelegenheitsspiele) ist ein Modewort für einfache elektronische Spiele, die sich durch eine besonders leichte Zugänglichkeit, intuitive Eingabemethoden, das kooperative Gameplay sowie schnelle Erfolgserlebnisse auszeichnen."

Quelle: http://de.wikipedia.org/wiki/Casual_Game

So ähnlich verhält es sich auch mit RAD-Controls. Aber das sind Spiele und unsere Programme können im Zweifelsfall darüber entscheiden ob es unseren Kunden nächstes Jahr noch gibt oder nicht.

Wie du schon geschrieben hast gibt es auch gute Beispiele, aber diese erfüllen maximal 1-2 Anforderungen und nicht die Anforderungen der ganzen Welt.

Darum von mir ein ganz dickes TOP, dass du dir über so ein wichtiges Thema gedanken machst.

Grüße aus Göppingen

Dennis

# März 16, 2010 01:17

Roberto sagte:

Hallo Jürgen,

auch ich muss Dir recht geben... Wir haben auch welche im Einsatz und wenn ich an die Zeit denke, die ich investiert (und mich geärgert) habe um diese zu erweitern, hätte ich evtl. ein paar eigene, flexiblere machen können.

Man muss halt bedenken, dass es "eierlegende Wollmilchsäue" sein müssen, d.h. für jeden soll alles passen - aber oft ist der Gegenteil der Fall.

Ich für meinen Teil versuche nur noch bspw. Charting Komponenten oder Ähnliches von Drittherstellern einzusetzen.

Vielleicht, wenn in Zukunft mal die Performance und der gerenderte HTML Code verbessert wird, überleg ichs nochmal :-)

Grüße,

Roberto

# März 16, 2010 09:28

Rene Drescher-Hackel sagte:

Hallo Jürgen,

ich hatte mich kürzlich mit dem Thema mal befasst und am Beispiel von obout-Suite für ASP.NET betrachtet. Das Problem ist letztlich die "eierlegende Wollmilchsau" - das wollen viele realisieren - funktionieren tut es am Ende aber eher nie.

Ich verlange einfach, dass, wenn ich eine Drittanbieterkomponente einsetze, ich diese über vorhandene Schnittstellen erweitern kann, ohne dass ich den Sourcecode haben/kenne muss.

Dann erwarte ich, dass die Controls nur dass einbinden, was sie auch wirklich brauchen. Prominentes Negativbeispiel: Scriptmanager - was wird da alles eingebunden und was wird tatsächlich benötigt. Als Positivbeispiel muss ich hier AJAX.NET Professional von Michael Schwarz wieder nennen. Michael hat die Komponente unter der Maßgabe "Löse das Problem und schaffe keine" programmiert. Ich kann mit minimalsten Aufwand nahezu alle AJAX-Aufgabenstellungen realisieren. Ich kenne aber auch Entwickler, die halten AJAX.PRO auch noch für zu "aufgebläht". Das kann man sicher so sehen, doch sieht mal mal, was diese Bibliothek alles abdeckt, dann ist sie alles andere, als "aufgebläht".

Du hast Recht, wenn du schreibst, kleinere Funktionalitäten, die im Web regelmäßig über Javascript umgesetzt werden, sind schneller selbst geschrieben, wenn man sich nur mal Gedanken darüber macht. In einem aktuellen Projekt standen wir wieder vor dem Problem: Aufgabenstellung - Dropdownlist, die sich im IE6 per Layer sperren lässt. Weitere Anforderung: editierbar muss sie sein. Zuerst hat der Kunde nach Fremdkomponenten geschaut, testweise implementiert und dann am Ende wieder festgestellt, dass die Komponente zwar cool ist, aber irgendwie nicht alles macht, was der Kunde sich vorstellt. Oft genug weiß der Kunde ja auch nicht, was alles geht - und so habe ich eine Komponente, die diese Aufgaben realisiert schnell selbst geschrieben. Unser Vorteil: klein, kompakt und jederzeit beliebig erweiterbar.

Das Layout hast ebenso schnell mit CSS selbst realisiert.

ABER: Es gibt eben auch viele Entwickler und vorallem auch Projekt-Entscheider, die es einfach nicht kennen/können - für die ist der Markt da - so ist das ebend...

Gruß

Rene

# März 16, 2010 22:01

codemurai sagte:

Ich oute mich jetzt mal:

Ich finde RAD, im richtigen Maß eingesetzt, super. RAD hilft (wenn auch nicht in allen Situationen) schnell zum Ziel zu kommen. Besonderer Fan von RAD Controls bin ich im Win Forms Bereich. Ich denke jeder, der mal unter C++ Windows Oberflächen per Hand gebaut hat, wird die Stärken der verschiedenen RAD Komponenten der Winforms Control Hersteller zu schätzen wissen.

Im Bereich ASP.NET Webforms nutze ich RAD Komponenten dort wo es Sinn macht. Häufig für Grids, Autocomplete bzw. einfach nur editierbare DropDowns, etc. Ich gebe dir recht, dass ASP.NET RAD Controls für Labels oder Textboxen quatsch sind ;-) Außerdem prüfe ich natürlich, ob ich die gewünschte Funktion nicht mit einfachen Mitteln selbst implementieren kann oder ob es kein ausgereiftes jQuery Plugin dafür gibt.

Bezüglich der Qualität des generierten Markups ist zu sagen, dass man in Betracht ziehen sollte, wann der Kern dieser meisten RAD Controls geschrieben wurde. Viele wurden initial noch zur Beta Zeit des 1.0er .NET Frameworks geschrieben, also zu einer Zeit als sich kaum jemand Gedanken um Standards, Barrierefreiheit oder sauberes Markup gemacht haben. Dies kann selbstverständlich keine Entschuldigung sein, erklärt aber zumindest woher der wirre Code kommt.

Einige der Hersteller haben die Problematik mittlerweile erkannt und schreiben Ihre Controls von grundauf neu. Diese Controls rendern besseres (wenn auch kein perfektes) Markup und weniger Script. Unter anderem berücksichtigen Sie auch das Problem der eierelegenden Wollmilchsau. Konkret bedeutet dies, dass die Controls erst mal nicht mehr alles sondern so gut wie gar nichts mehr können und dann selektiv über Behaviours mit mehr Funktionalität erweitert werden können.

Diesen Ansatz finde ich für ASP.NET Webforms passend. Daher sind es auch ausschließlich Controls dieser "zweiten Generation", die ich nutze. Die alten Controls würde ich mittlerweile auch nicht mehr mit der Kneifzange anfassen ;-)

Einen Vorteil den ich bei der Nutzung von Dritthersteller Controls sehe ist der Support. Wenn eine Funktionalität in einem Browser zugesagt wurde, aber nicht funktioniert eröffne ich ein Ticket, warte auf einen Hotfix und mache mit meiner restlichen Arbeit weiter. Programmiere ich alles selbst, dann kann ich mich auch selbst um Browserunabhängigkeit kümmern, was nicht zwingend Spaß macht.

Gerade kürzlich hatte ich die Anforderung ein ASP.NET Gridview unter IE 6 - 8 , FF, Opera, Chrome und Safari bei fixen Headern scrollbar zu machen. Ein jQuery Plugin, dass unter allen Browsern funktioniert hätte, habe ich nicht gefunden. Daher musste ich selbst ran. Das ganze hat mich ungefähr zwei Tage gekostet, bis es wirklich in allen genannten Browsern rund lief. Mit einem beliebigen 3rd Party Grid wäre es nach 15 Minuten erledigt gewesen ...

Von daher halte ich 3rd Party Controls bzw. RAD in Webforms mit Blick auf Support und Langzeitwartung für durchaus sinnvoll.

Blickt man Richtung MVC finde ich, dass einige Hersteller hier vollkommen in die falsche Richtung rudern. Ich habe bereits Ansätze gesehen, in denen ein für MVC gepatchter Scriptmanager geschrieben wurde, der den Einsatz von ASP.NET Servercontrols dieses Herstellers ermöglichte. Vollkommen am Ziel vorbei geschossen wie ich denke.

Hier sollte die Strategie wirklich eher sein, die Funktionalität in Form von jQuery Plugins in saubere Client Scripts zu verpacken, die ohne ScriptManager oder ähnlichem auskommen. Somit wäre auch der potentielle Käufermarkt um einiges Größer, da auch Java oder PHP Entwickler zur Zielgruppe gehören würden. Für Webforms Entwickler müsste man nur einen serverseitigen Wrapper drum herum bauen und auch die wären Glücklich.

Nun ja, mal sehen was die Zukunft zu bringt ;-)

# März 17, 2010 11:26

Jürgen Gutsch sagte:

Hallo André,

vielen Dank für deinen ausführlichen Kommentar. Dem gibt es von meiner Seite absolut nichts entgegen zu setzen. :-)

# März 17, 2010 12:11

Jürgen Gutsch sagte:

Wer auf “Klicki-Bunti” *) nicht verzichten kann oder will und dennoch ASP.NET MVC machen will, dem sei

# April 12, 2010 08:50

Mondmann sagte:

Hallo Jürgen. Immer wieder findet man doch auf Deinem Blog was interessantes.

Und das was Du da schreibst, spiegelt genau meine  Erfahrungen als ASP.NET Anfänger vor einem Jahr (bis heute)wider.

Naiv wie ich war habe ich meinen Chef überreden können fertige RAD Controls zu kaufen, welche zum Glück nicht allzu teuer waren.

Die anfängliche Begeisterung vermindert sich bis heute kontinuierlich. Nicht nur wegen dem aufgeblähten Quelltext, sonder weil sich die Entwicklung (m)einer ASP.NET Anwendung durch die Controls enorm verlangsamt hat.

Erst einmal musste ich lernen mit den Controls und mit der gesamten ASP.NET Geschichte umzugehen (Stuchwort Lifecycle).

Später gabs einige Fehler die ich mir nicht erklären konnte und habe dann den Support angeschrieben, der mir dann bestätigte, daß es ein Bug ist.

Das passierte  inzwischen 3 Mal, ich bekam immerhin eine neu kompillierte Version der DLL, aber jedes Mal waren viele viele Stunden der Fehlersuche dahin.

Manche Controls ticken einfach anders und sind anders zu handeln, als die eingebauten.

Ich jedenfalls nutze inzwischen nur noch wenige eingekaufte RAD's bei denen es tatsächlich eine enorme Zeitersparnis gibt (GridView), ansonsten komme ich zu den mir bekannten Wurzeln zurück und nutze vermehrt jQuery mit dem ich diesselbe Seite in einem Drittel der Zeit erstellt habe... und zwar so wie ich Sie haben will...

# Juli 13, 2010 14:08
Anonyme Kommentare sind nicht zugelassen