2012-05-14 11 views
6

Pracuję nad projektem internetowym i po wielu badaniach postanowiłem zastosować podejście JSF + Primefaces, Spring i Hibernate. Projektując architekturę moim projekcie mam ukończone następujące podejście:Architektura JSF-SPRING-HIBERNATE - najlepsza praktyka związana z komponentami bean fasoli

aktora -> JSF + PrimeFaces strona ---> Backing Bean -> Usługi Bean -> Dao -> Hibernacja

  • Fasolka serwisowa i DAO to fasola szparagowa z zastrzykiem zależności.

Moim problemem teraz jest teraz w odniesieniu do fasoli podporowego: Mam zamiar korzystać z wielu ziaren poparcie dla strony UI w zależności od typu strony muszę render.

Teraz na przykład: Dla nowej strony rejestracji użytkownika mam UserProfile.xhtml, która używa UserBackingBean. UserBackingBean ma UserServiceBean wstrzykiwany wiosną. UserServiceBean ma UserDao wstrzykiwany przez Spring.

Teraz w UserBackingBean, gdy użytkownik wprowadzi dane formularza z UserProfile.xhtml, będę musiał wypełnić obiekt User.java domeny (ORM).

a) Jaka jest najlepsza praktyka w tym zakresie? Czy powinienem zainicjować User.java w konstruktorze na UserBackingBean? Czy to właściwe podejście? Proszę zasugerować, czy istnieje jakieś inne wyjście?

b) Proszę również zasugerować powyższą architekturę, którą zdecydowałem się na mój projekt? Czy to właściwe podejście?

Odpowiedz

2

Ogólna zasada, której przestrzegam, oznacza, że ​​granice transakcji są zaznaczone w komponentach usługi, dlatego nie chcę modyfikować hibernacji POJO poza usługą, ponieważ nie wiem, czy jest już uruchomiona transakcja. Tak więc od komponentu bean nazwałbym przekazanie warstwy usługi w parametrach, które warstwa usługi musi zbudować pojo hibernacji i zapisanie go, zaktualizować, itd.

Innym sposobem na zrobienie tego byłoby twoja podkładka implementuje interfejs zdefiniowany przez warstwę usługi, a następnie przekazuje komponent bean backing do warstwy usługi. Na przykład.

public interface UserInfoRequest { 
    public String getName(); 
} 


@Service 
public class SomeSpringService { 

    @Transactional(.....) 
    public void registerNewUser(UserInfoRequest request) 
    { 

    } 

} 

public class SomeBackingBean implements UserInfoRequest { 

    private SomeService someSpringService; 

    public void someMethodBoundToSJF() 
    { 
     this.someSpringService.registerNewUser(this); 
    } 
} 

Jeśli chodzi o Twoje ostatnie pytanie nie jestem fanem JSF, myślę JSF jest fundamentalnie błędna, ponieważ jest to framework oparty komponent serwera. Tak więc mój argument przeciwko JSF jest ogólnym argumentem przeciwko strukturom opartym na komponentach po stronie serwera.

Podstawową wadą frameworka opartego na składnikach po stronie serwera jest to, że nie kontrolujesz tego, co komponent będzie wyprowadzał, co oznacza, że ​​utknąłeś z wyglądem komponentu, jeśli chcesz czegoś, co wygląda inaczej, musisz napisać własną składnik lub musisz zmodyfikować istniejący komponent. Przeglądarki internetowe ewoluują bardzo szybko, dodając nowe funkcje, które mogą naprawdę poprawić jakość interfejsu użytkownika aplikacji, ale te funkcje musisz napisać bezpośrednio HTML, CSS i JavaScript, a komponenty po stronie serwera sprawiają, że jest to trudniejsze.

Architektury komponentów po stronie klienta są tutaj i znacznie lepsze niż wykonywanie komponentów po stronie serwera. Oto mój zalecany stos.

Client Architecture Side:

  • jQuery.JS - Podstawowe libary aby wszystkie przeglądarka wyglądają tak samo do JavaScript
  • backbone.js + underscore.js - Wysoki poziom składnika po stronie klienta architektura oparta
  • handlebars.js - dla szablonów po stronie klienta
  • Twitter Bootstrap - do dostać przyzwoity zestaw startowy CSS & widgety

napisać kod HTML, CSS i JavaScript zorganizowany poglądów szkieletowych, które mówią do bocznych serwer modeli wykorzystujących AJAX. Masz pełną kontrolę nad doświadczeniem użytkownika po stronie klienta z wystarczającą strukturą , aby naprawdę stworzyć ładny kod wielokrotnego użytku.

Server Side Architecture:

  • Adnotacja Driven wiosny MVC, Usługi i Dao (@Controller, @Service, @Repository) skanowanie komponent
  • Wiosna z autowiring wg grup rodzajowych (@Autowired, @Inject)
  • AspectJ obciążenia czasu tkania lub kompilacji tkania
  • hibernacji
  • Tomcat 7
  • JSP jako widok tech logia Spring MVC (tak to cluncuky ale wont być tworzenie zbyt wiele stron JSP, głównie dla usng <% @inculde> dyrektywa

Oprzyrządowanie: - Wiosna Narzędzie apartament - JRebel (tak, że don” t trzeba uruchomić i zatrzymać serwer) to naprawdę działa naprawdę warte swojej ceny - Tomcat 7