Freitag, 21. November 2008

The Power of J2EE + Richfaces - oder: Wer hat den kürzeren?

Michael Derntl hat vor wenigen Tagen berichtet, wie er sich mit Hilfe von Bibliotheken (Prototype) das Leben einfacher macht. Das selbst gesetzte Ziel war es, den nötigen selbsterstellten Quelltext von AJAX Applilkationen zu verkürzen - ganz nach dem Motto "Code less, create more".

Ich behaupte frech, es geht noch viel einfacher und trete gleich den Beweis an. Unterstützen lasse ich mich dabei von JBoss RichFaces, einer JSF Implementierung mit AJAX Out-of-the-Box Support.

Der Taschenrechner wäre mit folgendem Code erledigt:
<h1>AJAX Calculator Demo</h1><a4j:form>
Multiply <h:inputText value="#{calculator.x}" /> x <h:inputText value="#{calculator.y}" />
<a4j:commandButton value="=" action="#{calculator.calc}" reRender="result" />
<b><h:span id="result">#{calculator.result}</h:span></b>
</a4j:form>

public class Calculator
{
private int x,y,result;
public int getX() { return x; }
public int getY() { return y; }
public int getResult() { return result; }
public void setX(x) { this.x = x; }
public void setY(y) { this.y = y; }
public void calc() { result = x*y; }
}

Das Beispiel zum Bearbeiten von Texten sobald man draufklickt, reduziert sich überhaupt auf eine einzige Zeile:
<rich:inplaceInput value="#{bean.text}" />
Wers nicht glaubt, oder live ausprobieren mag, kann sich Demos zum A4J CommandButton und zum Rich InplaceInput anschauen.

Was lernen wir daraus? Mit den richtigen Frameworks und Bibliotheken hat man mehr Zeit für wichtige Dinge. Software entwickeln statt Programmieren. Held der Arbeit statt Coding Monkey.

4 Kommentare:

Michael Derntl hat gesagt…

Natürlich geht es einfacher als mit Prototype. Es ist nur die Frage, was mein/Ihr Ziel ist. Wenn Sie auch den Code, der hinter dem rich:inplaceInput steht selber schreiben können bin ich zufrieden. Wenn Sie das nicht können, frage ich: wie unterscheiden Sie sich von einer Psychologin, von einem Numismatiker, von einem Betriebswirt? Der Betriebswirt kann (hoffentlich) eine Bilanz händisch erstellen, auch wenn er das im Berufsleben nicht händisch machen wird. Das ist einer der Gründe warum ich in den LVs ungern mit Frameworks auffahre, sondern mit dem Mehl, der Hefe, dem Wasser und dem Salz aus dem der Pizzateig gemacht wird. Eine Pizza beim Pizzamann kann jeder bestellen. Aber der Pizzabäcker sollte mal eigenhändig loslegen. Mit dem Prototype hab ich was gesucht und gefunden, wo man immer noch in der Welt des Mehls und des Wassers ist. Man muss selber Hand anlegen (=Javascript schreiben), aber man hat bessere Werkzeuge.

Michael Derntl hat gesagt…

Aja was ich vergessen habe: Danke für den JSF Code, zusätzliche Perspektiven sind immer gut!

swa.magr hat gesagt…

Arbeitsteilung und Spezialisierung sind sehr wesentliche Bestandteile der Menschheitsentwicklung und der Hauptgrund warum wir heute in Wohlstandsgesellschaften leben.

Ich kenne auch die RFCs zu HTTP, POP3 und SMTP. Trotzdem krabble ich nicht mit Telnet auf fremden Servern herum, sondern verwende Browser und Mailclients.

Ich verwende Java / PHP / $HighLevelProgrammingLanguage, nicht Assembler, nicht Maschinencode. Ich muss auch nicht mit Mantissen und Exponenten im Schlaf hantieren können, um Variablen vom Typ double verwenden zu können.

Nicht immer habe ich Zeit oder Lust mir selbst eine Pizza zu kochen (schon gar nicht wenn ich gerade Riesenhunger habe, analog der Kunde sein Projekt am liebsten gestern umgesetzt sehen möchte).

Und selbst wenn der Pizzabäcker ans Werk geht, dann nimmt er Mehl, Hefe, Wasser und Salz so wie er sie eingekauft (bekommen) hat.

Auch das sind in Wahrheit Black-Box-Bibliotheken. Denn er baut nicht auch noch vorher das Getreide am Feld an, erntet und drescht es zu Mehl. Er geht auch nicht ins Bergwerk um sich dort das Salz aus den Stollen zu schlagen. Für die Tomatensoße zermatschkert er nicht selbst gezüchtete Paradeiser. Das Wasser kommt aus der Leitung, nicht selbst aus dem Grundwasser-Brunnen gepumpt.

Und genausowenig studiere ich vorher Ernährungswissenschaften (danach müsste Pizza sowieso gestrichen werden), Physik um zu verstehen warum die Pizza knusprig wird, und Biochemie um zu wissen was die Hefe anstellt oder wie sich die Zutaten beim Backen chemisch verändern.

Die Nahrungsverwertung und Verdauung funktioniert auch ohne Physiologie-Kenntnisse prächtig.

Das ist es was ich meine, wenn ich von "Software entwickeln" statt "Coding Monkey spielen" meine.

Ich verfolge lieber einen Top-Down Ansatz, beschäftige mich mit dem groben Ganzen und verwende Frameworks. Wenn ich dann einmal etwas selbst implementieren muss, dann kann ich mich immer noch in Details einarbeiten.

Mir ist es aber natürlich klar, dass in LVAs die relativ früh im Studium kommen, andere Ziele verfolgt werden. Die Lernkurve von Framworks ist zu diesem Zeitpunkt auch viel zu steil.

Mal abgesehen davon sollte eine akademische Ausbildung sowieso nicht auf konkrete Produkte aufbauen.

Derartige Blog-Einträge dürfen daher auch nicht als subtile Wünsche einer Andersgestaltung der LVA verstanden werden, sondern wie ich es in meinem allerersten Posting schon angekündigkt habe, um "eher weiterführende Themen anreißen, um aufzuzeigen wie man sich durch geschickten Einsatz von Tools und Bibliotheken das Leben wesentlich erleichtern kann."

Michael Derntl hat gesagt…

Ich stimme Ihnen ja völlig zu. Ich habe meinen Kommentar nicht gut formuliert, was ich sagen wollte: Das Studium ist natürlich so aufgebaut, dass man mit null starten kann, und das Basis Handwerkszeug mitkriegt und in weiteren Semestern darauf aufgebaut wird. Im Web Technologie Teil von SWA sollen Sie lernen wie AJAX funktioniert. Mit einem rich:inplaceInput erreicht man das nicht.

Mein Kommentar sollte auch nicht Sie persönlich ansprechen, sondern Studierende der Informatik allgemein. Wenn Sie schon weiter fortgeschritten sind als jene die mit Null angefangen haben, dann trifft das auf Sie ja ohnehin nicht zu. Ich muss ja auch auf jene schauen, die noch keine Ahnung von diesen Dingen haben.