2012-03-30 11 views
1

Implementieren eines einfachen Anmeldebildschirms mit JSF und Spring und Hibernate. Ich habe die Service und Data Layer Beans im Frühjahr geschrieben und sie in Hibernate integriert.Integrieren von JSF und Feder

Ich habe eine Anmeldung (neue Benutzererstellung) Bildschirm mit zwei Feldern Benutzer-ID, Passwort in JSF und verdrahtete sie zu einem Managed Bean. (Bean Name: Benutzer) Hier ist diese Bean auch die Domain-Klasse.

Jetzt auf einen Klick auf die Schaltfläche zum Erstellen in der JSF-Ansicht Ich muss die Service-Bean-Methoden aufrufen (die Frühlingsbohnen sind). Dafür sehe ich, dass ich zwei Möglichkeiten zu tun haben,

  1. Schreiben Sie eine Methode in Benutzer-Bean verwaltet, die dem angegebenen Benutzer, Passwort und ruft die Feder Service Bean-Methoden, die wiederum ruft DAO Bean-Methoden nimmt Daten zum Speichern in der DB. Aber hier meine Frage ist, wie weit es eine gute Praxis ist, Controller Art von Methode in Domain-Klassen zu schreiben?

  2. Der zweite Weg besteht darin, eine neue Managed Bean zu definieren, die das Spring Service-Objekt als Eigenschaft (die mit Spring + JSF-Integration injiziert wird) und eine Methode zum Aufruf der Service Bean-Methoden hat.

Mache ich ein korrektes Design? Irgendwas falsch? Bitte schlagen Sie mich für ein besseres Design vor.

Danke

Antwort

2

Machen Sie Ihre Domain-Klasse nicht als jsf Managed Bean.

Im Allgemeinen, was ich folge, ist ich kapseln Domain-Klasse und andere UI unterstützende Eigenschaften in einem Formular-Bean (wenn Szenario komplex ist andere direkte Entität als eine Eigenschaft in verwalteten Bean) und haben es in verwalteten Bean.

Der Spring Service wird in die Managed Bean injiziert, und in der Aktionsform bean/Entity Bean wird der Spring Service für Business/Use Case Processing und Persistenz (Dao/Repository) übergeben.

Template Code:

@ManagedBean 
public class Bean{ 

    private Entity entity;//or 
    private FormBean formBean; 

    @Inject private Service service; 

    public String doAction(){ 
    //error processing from service layer and UI message handling 
    service.process(entity);//or 
    service.process(formBean); 
    return Navigation.Constant; 
    } 
} 

Managed Bean Zweck sollte es sein, einen Blick Daten zu sammeln und übergeben Sie für die Verarbeitung zu bedienen. Wenn Sie Ihre Domain/Entity-Klasse als Managed Bean definieren, koppeln Sie diese mit der JSF-Library, die nicht für die Wiederverwendbarkeit geeignet ist. Laut Entwurfsprinzip SRP (single responsibility principle) sollte die Klasse eine Verantwortlichkeit haben, in diesem Fall wird sie mehr haben und daher, wie oben erwähnt, keine gute Praxis darstellen.

Punkt 2 wie von Ihnen erwähnt ist besser.

Hoffe das hilft !!!!

+0

danke für die Antwort. Nun, ich folge dem zweiten Punkt. – droidsites

+0

@droidsites Sie sind willkommen –