2009-06-22 15 views
1

Ich bin Student an einer deutschen Universität.
Ich habe einen Team-Programmierkurs .. wo wir JavaEE/JSF verwenden müssen, um eine Social-Networking-Site zu erstellen .. wie LinkedIn.
Wie auch immer meine Gruppe hat eine Menge Bohnen erstellt. Welche IMHO ist zu viel.Wie viele Bohnen sollten genug sein?

<?xml version='1.0' encoding='UTF-8'?> 

<!-- =========== FULL CONFIGURATION FILE ================================== --> 

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> 
    <managed-bean> 
     <managed-bean-name>SessionBean1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.SessionBean1</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>ApplicationBean1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.ApplicationBean1</managed-bean-class> 
     <managed-bean-scope>application</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>RequestBean1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.RequestBean1</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Hauptseite</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.Hauptseite</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>PasswordVergessen</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.PasswordVergessen</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>registery</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.registery</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Page1</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.Page1</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <validator> 
     <validator-id>login.EmailValidator</validator-id> 
     <validator-class>Login.EmailValidator</validator-class> 
    </validator> 

    <managed-bean> 
     <managed-bean-name>Bewertung</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Bewertung</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Mitarbeiter</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Mitarbeiter</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Nachrichten</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Nachrichten</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>Benutrzer</managed-bean-name> 
     <managed-bean-class>group52.infoholders.Benutzer</managed-bean-class> 
     <managed-bean-scope>application</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$MainPage</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.MainPage</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$NavigationBar</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.NavigationBar</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$PartnerProfilePage</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.PartnerProfilePage</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$PartnerProfileChange</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.PartnerProfileChange</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
     <managed-bean-name>view$ProfilePage</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.ProfilePage</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <navigation-rule> 
     <from-view-id>/Page1.jsp</from-view-id> 
     <navigation-case> 
      <from-outcome>case1</from-outcome> 
      <to-view-id>/view/MainPage.jsp</to-view-id> 
     </navigation-case> 
    </navigation-rule> 
    <navigation-rule> 
     <from-view-id>/view/MainPage.jsp</from-view-id> 
     <navigation-case> 
      <from-outcome>case1</from-outcome> 
      <to-view-id>/view/ProfilePage.jsp</to-view-id> 
     </navigation-case> 
    </navigation-rule> 
    <managed-bean> 
     <managed-bean-name>view$ProfileChange</managed-bean-name> 
     <managed-bean-class>egispartnerprofile.view.ProfileChange</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
</faces-config> 

Eigentlich:

  • haupt Site ist ein Bean
  • Wir haben 3 Anwendungs ​​Beans
  • Ich benutze 1 Session Bean nur

Ich denke, sie missunderstood den Zweck Bohnen. (Haben sie? Oder liege ich falsch?!)
Wie kann ich ihnen klar machen ... th bei 1 Session Bean ist (oder könnte) genug sein?

+0

Einige haben ernsthafte Gasprobleme mit allen Bohnen –

Antwort

10

Es sieht nicht so aus, als ob es zu viele Bohnen gibt, aber natürlich hängt es davon ab, was die Bohnen tun und wie sie verwendet werden. Die Regel "Eine Bohne pro Ansicht" ist ziemlich üblich und es ist normalerweise nichts falsch daran. Natürlich, wenn Sie einige allgemeinere Beans schreiben können, die für viele/alle Views verwendet werden können, sollten Sie dies natürlich tun, einfach versuchen, ihren Zweck klar und fokussiert auf eine einzelne Aufgabe zu halten.

Die Tatsache, dass die meisten Ihrer Bohnen Anfrage-Bereich sind, ist gut. Nur Beans, die während der gesamten Dauer einer Benutzersitzung einen bestimmten Status beibehalten müssen, sollten in den Sitzungsumfang aufgenommen werden (daher der Name). Dies hält auch den Speicherverbrauch pro Sitzung niedrig. Der Anwendungsumfang wird normalerweise für Beans verwendet, die einmal erstellt werden müssen und von allen Benutzern Ihrer Site verwendet werden. Wie globale Variablen/Singletons sollten Sie sie sparsam verwenden.

Aber über Ihre Idee, dass eine Session Bean genug ist: Es gibt keine allgemeine Regel, wie viele Beans in welchem ​​Umfang sein müssen. Entwerfen und entwickeln Sie die Bohnen und entscheiden Sie dann, in welchem ​​Umfang sie sein müssen. Wie gesagt, es ist sehr wahrscheinlich, dass die Anzahl der Beans im Sitzungsumfang niedriger ist als die Anzahl der Beans im Anforderungsbereich, aber wenn ein Bean im Sitzungsumfang sein muss, um ordnungsgemäß zu funktionieren, sollten Sie keine Angst davor haben.

Versuchen Sie nicht, alles in eine einzelne Session-Bean zu pressen, nur weil Sie nur eine Bean im Sitzungsumfang haben möchten. Dies würde eine God Object genannt werden, die eine anti-pattern ist.

So haben Sie zum Beispiel einige Benutzerinformationen (zB vollständiger Name, Status, Rolle ...) in einer Datenbank gespeichert, die Sie auf allen Seiten anzeigen möchten, wenn ein Benutzer angemeldet ist (wie die graue Leiste bei die Spitze hier auf SO). Dies könnte etwas sein, das Sie als Session-Scoped-Bean implementieren könnten, das auf all Ihren Seiten verwendet wird (oder besser noch in irgendeinem Header, der auf jeder Seite enthalten ist). Diese Bean wird erstellt, sobald sich der Benutzer anmeldet und die Informationen nur einmal aus der Datenbank abruft.

In einem Online-Shop könnte eine andere Session-Bean verwendet werden, um den Einkaufskorb des Benutzers zu speichern. Eine weitere Session-Bean könnte für die Verwaltung einer separaten Einkaufsliste verwendet werden ...

aus, dass abgesehen, würde ich auf den Benennungsregeln/style Sie und Ihr Team einen Kommentar abgeben verwendet:

  • Sie auf einer Sprache (vorzugsweise Englisch) entscheiden und dabei zu bleiben, so dass keine Klasse/Methode/Variablennamen wie „PasswordVergessen“
  • Jede Klasse/Methode/Variable einen beschreibenden und Selbst explaning Namen haben sollte, so verwenden Sie nicht somthing wie „ApplicationBean1“
  • Versuchen Sie, Ihre Gesichter-config in Blöcke zu organisieren (getrennte Navigationsregeln aus Bean-Definitionen usw.)
+0

"Es ist sehr wahrscheinlich, dass die Anzahl der Bohnen im Anforderungsbereich niedriger ist als die Anzahl der Bohnen im Sitzungsumfang" - meintest du das anders herum zu sagen ? –

+0

@Mike: Natürlich ... Ich habe es geändert. –

1

Ich würde sagen, dass Simon sehr gut auf Ihre Frage geantwortet hat und wenig Grund zur Vertuschung lässt. Zusätzlich zu all den genannten Dingen; Ich würde einfach sagen, dass der Fokus auf OO-Design liegen sollte, da dies die Anzahl der Bohnen kontrollieren sollte und nicht eine rudimentäre Figur im Kopf.

Ein eng gekoppelter 3-Bean-Code ist genauso schlecht wie ein Code, der 2000 Beans enthält und keinen wirklichen Zweck hat. Es ist das Design, das Sie führen muss.

Ich kann vom Punkt abweichen; aber wenn Sie wirklich sehen möchten, wie Ihre Bohnen kontrolliert werden sollten, lesen Sie "The Thoughtworks Anthalogy" Kapitel "Object Calisthenics" -Assay von Jeff Bay geschrieben. Die einfachen Regeln für die Programmierung ist (Einige von ihnen sogar unglaublich) :) 1. Verwenden Sie nur eine Ebene der Einrückung pro Methode 2. Verwenden Sie nicht das Schlüsselwort else 3. Umwickeln Sie alle Primitiven und String 4. Verwenden Sie nur eine Punkt pro Zeile 5. Nicht abkürzen 6. Keep entities small 7. Verwenden Sie keine Klassen mit mehr als 2 Instanzvariablen 8. Verwenden Sie erstklassige Sammlung 9. Verwenden Sie keine Getter Setter-Eigenschaften. (Ich weiß, dass es JSF nicht funktioniert)

Aber mit diesen Regeln werden Sie mit einigen echten Herausforderungen konfrontiert werden. Aber Sie werden sehen, dass, obwohl die Anzahl der Bohnen riesig ist, Sie perfekt entworfenen Code haben. :)

Kurz gesagt, stimme ich zu, dass Sie weg von Anti-Muster bewegen sollten, aber die meiste Zeit eine Session-Bean ist genug und es ist gut, alle Beans mit Anforderungsbereich zu haben. Die Anzahl der Bohnen ist unerheblich, solange Sie einen gut gestalteten und flexiblen Code haben. Prost.

+0

Hier ist eine direkte Verbindung zu dem Aufsatz "Object Calisthenics" erwähnt: http://www.xpteam.com/jeff/writings/objectcalisthenics.rtf –

Verwandte Themen