2009-06-08 3 views
3

Ich versuche Java Web-Programmierung zu lernen. Ich komme aus einem Perl-Scripting-Hintergrund und kenne sehr wenig Java, geschweige JSF/Seam/EJB3.0. Ich habe viele Fortschritte in dieser sehr steilen Lernkurve gemacht, aber es gibt einige große konzeptionelle Probleme, die mich etwas behindern.Kann jemand das komponentenbasierte Paradigma in der Java-Webprogrammierung beschreiben?

In letzter Zeit habe ich meine Aufmerksamkeit darauf gerichtet, JSF zu lernen. Normalerweise beinhalten Diskussionen über JSF eine Beschreibung der komponentenbasierten Webprogrammierung, scheinen aber anzunehmen, dass man Erfahrung mit den anderen Paradigmen der Webprogrammierung hat. Ich wäre an einer umfassenderen Diskussion dieses komponentenbasierten Paradigmas im Kontext anderer Paradigmen interessiert.

Kann jemand erklären?

Vielen Dank im Voraus für Ihre Gedanken.

TDR

Antwort

2

Die Grundidee ist nur eine Erweiterung von Object Oriented Design: Trennen Sie die Anliegen Ihres Programms. Auf die gleiche Weise, wie Sie mehrere verschiedene PERL-Skripte erstellen und sie für die Arbeit aneinander reihen können, werden wir mehrere verschiedene JSF-Komponenten erstellen und sie zusammenreihen, um Arbeit zu leisten.

Nehmen wir ein einfaches Registrierungsformular als Beispiel. Ich möchte Ihren Namen, Ihr Geburtsdatum, Ihre Adresse wissen und dies alles dem Backend vorlegen, um die Arbeit zu erledigen.

Als erstes müssen wir Ihr Formular in logische Stücke zerlegen. Wenn wir wüssten, dass wir dieses genaue Formular an vielen verschiedenen Stellen wiederverwenden würden, wäre diese Form vielleicht ein logisches Stück. In diesem Fall könnten wir eine Komponente erstellen, die das gesamte Formular rendert und an eine Bean wie "Kontakt" bindet. Auf diese Weise könnten Sie jederzeit, wenn Sie das Formular verwenden möchten, es ablegen, an eine Contact-Bean binden (das hängt von Ihrem Framework ab) und von dort aus weitermachen. Aber das wäre ein ziemlich dumpfes Beispiel. :)

Aus meiner Schätzung sehe ich Name, Geburtsdatum und Adresse als drei separate, logische Einheiten. Der Name wäre wahrscheinlich einfach. Nur eine Standard-Texteingabe. Wir können also ein h: inputText-Element oder die bevorzugte Version Ihres Frameworks verwenden und dieses mit dem Namensfeld Ihres Bean verknüpfen.

Zweitens haben wir das Geburtsdatum. Im einfachsten Fall können wir ein h: inputText-Feld erstellen und ein f: converter-Element hinzufügen, so dass, wenn wir es an die Bean binden, ein Datum ausgegeben wird. Sie können dies als vollständig interaktives Kalender-Widget skalieren, komplett mit Java Script und was nicht.Einige gute Beispiele finden Sie in IceFaces und RichFaces. Aber das gleiche Kernkonzept bleibt: Eine einzelne Komponente, die Sie an ein Datumsobjekt binden.

Drittens haben wir die Adresse. Dies ist eine gute Wahl für eine Komponente, weil Sie wahrscheinlich Adressen in vielen verschiedenen Seiten kennen müssen. Es ist auch viel komplexer als eine einzige Eingabe. Sie müssen mehrere Eingaben, Validierungen und Spaß-Ajaxy-Sachen kombinieren, um eine zusammenhängende Einheit zu bilden. Allerdings wird der Entwickler, der es benutzt, hoffentlich nur <foo:address value="#{BarBean.address}"/> mit vielleicht ein paar anderen Optionen verwenden müssen.

Diese Trennung von Bedenken ist der Kern von nicht nur komponentenbasiertem Webdesign, sondern auch objektorientierter Programmierung. Es gibt viele Tools, um dies auch zu erleichtern! Facelets ist ein großartiges Beispiel. Sie können Ihr Grundlayout in ein eigenes Blatt zerlegen und einfach den nützlichen Inhalt über die Elemente von ui: define einfügen. Sie können Kompositionskomponenten erstellen, mit denen Sie schnell nützliche Komponenten erstellen können, ohne sich in das JSF-Komponentenframework zu vertiefen. Das Adressbeispiel wäre mit einer Facelets-Kompositionskomponente sehr einfach zu machen. IceFaces ist ein weiteres gutes Beispiel. Es verarbeitet alle Arten von AJAXy-Eingaben, Redraws und Updates, ohne dass ich mir Sorgen darüber machen muss, wie alles funktioniert (zum größten Teil;;), sodass ich mich darauf konzentrieren kann, was die Form zu erreichen hat und nicht wie das Formular ausgeführt wird.

Dies kratzt nur die Oberfläche, aber die breitesten Striche sind ähnlich wie bei jedem großen Programm: Identifizieren Sie die kleinsten, logischen Teile und bauen Sie sie, bevor Sie diese verwenden, um größere Teile zu bauen.

+0

Dies ist eine sehr durchdachte Antwort. –

0

Ich denke, dass eine gute Erklärung viel Mühe nehmen würde. Ich würde vorschlagen, zuerst Ihre Java-Kenntnisse zu vertiefen, damit Sie die Code-Beispiele verstehen, denen Sie später begegnen werden, wenn Sie versuchen, Tutorials aus dem Internet zu folgen oder ein Buch besser zu kaufen.

Kurz gesagt: JSF versucht, Ihnen die Programmiererfahrung einer Desktopanwendung für eine webbasierte App zu vermitteln. Anstatt zum Beispiel große JSPs haben Sie viele kleinere Komponenten, die Sie wiederverwenden können. Der Status der Seite wird so gut wie möglich beibehalten, auch wenn Sie eine echte Anfrage (nicht nur einen Ajax-Aufruf) durchführen, indem Sie den Status der DOM-Komponenten zum und vom Server übertragen.

0

JSF und Java EE im Allgemeinen ist so konzipiert, dass große Teams die Aufgaben in eine modulare Form aufteilen können.

Anstatt mehrere Personen auf derselben .jsp- oder .xhtml-Seite und derselben Java-Backing-Bean-Klasse arbeiten zu lassen, können Komponenten daher mit derselben Anwendung arbeiten, ohne sich gegenseitig zu stolpern.