2013-10-09 8 views
20

Sono nuovo di scrivere un ws di riposo a molla. Ho creato un progetto con la seguente struttura.come definire la struttura del pacchetto per un'applicazione Spring REST MVC?

Java Resources 
    - src/test/java 
    - src/main/java 
    - com/sample/rest 
     - controller (for the request mappings) 
     - domain (for POJOs) 
     - service (for business logic) 
     - utility (for utility methods) 
     - dao (for database calls) 

ho iniziato aggiungendo POJO nel pacchetto dominio, ma il mio problema è che ho 2 tipi di POJO nella mia applicazione. Un tipo che corrisponde alla struttura della tabella dell'applicazione. Un altro tipo che corrisponde a una struttura dei risultati di terze parti.

Non sono sicuro di come sia possibile differenziare questi 2 tipi di POJO nel mio pacchetto di domini.

risposta

34

la maggior parte dei progetti assomiglia a quello che hai descritto. Il pacchetto di domini interni avrebbe un pacchetto utente in cui avrebbe tutti i pojos relativi all'utente. Su dao, il servizio avrebbe anche gli stessi sotto-pacchetti.

Ma un'organizzazione che penso che sia migliore è quella di dividere i pacchetti è in questo modo:

-com.company.project 
    - users 
     UserService 
     UserDAO 
     User 
     Role 
    - cart 
     Cart 
     CartService 
     CartDAO 
     ShopItem 

E così via. L'ho visto per la prima volta in un discorso di un ragazzo di Spring Source. Proverò a trovare il video.

In ogni caso, sto lavorando a un progetto con questa strategia da alcuni mesi, e fino ad ora sembra essere più organizzato del tradizionale modo.

Se un pacchetto, ad esempio gli utenti, diventa troppo affollato, è sempre possibile creare pacchetti secondari da organizzare al suo interno. Ma per la maggior parte dei pacchetti saranno 1 o 2 classi di dominio, un DAO e un servizio. Quindi non c'è bisogno di più pacchetti.

Aggiornamento: Penso che questo è il video: http://www.youtube.com/watch?v=tEm0USdF-70

+2

Questa scala è molto migliore del comune approccio dao/controllore/servizio/entità. Come nota a margine: Ogni volta che introduco questo agli sviluppatori sono scioccati (e quindi non sono disposti a fare un tentativo) quanti pacchetti eclissi mostra nella sua vista pacchetto piatta (predefinito). Passa alla rappresentazione gerarchica e stai bene. – atamanroman

+2

Ricorda che se stai usando Spring e vuoi istanziare solo tipi specifici di classi (ad esempio solo modelli senza DAO) non sarai in grado di utilizzare i componenti di scansione in modo efficiente. –

+0

Qual è l'usecase per istanziare solo tipi specifici di classi? (domanda seria :)) –

5

Lets vengono pensare dal modulo/punto di vista della libreria.

È buona norma disporre di una libreria logica di core business separata all'esterno dell'applicazione, tenerla separata con la libreria di test e libreria di riposo per abbracciare la libreria di base della business logic, utilizzando la funzionalità all'interno della logica di business principale.

Module : MyAppLogic.jar 
    -> com.company.user 
     -> class UserBean : Pojo 
     -> class UserDao : insert(String userName , String userEmail) ; 
     -> class UserService : insert(UserBean userBean) ; 
    -> com.company.cart 
     -> class CartBean : Pojo 
     -> class CartDao : insert(int cartUserId , int cartItemId) ; 
     -> class CartService : insert(CartBean cartBean) ; 

Module : MyAppRest.jar 
    -> com.company.rest.domain 
     -> class User : @XmlRootElement 
     -> class Cart : @XmlRootElement 
    -> com.company.rest.model 
     -> interface UserServiceIntf : insert(User user) ; 
     -> class UserServiceImpl : private UserService userService ; 
     -> interface CartServiceIntf : insert(Cart cart) ; 
     -> class CartServiceImpl : private CartService cartService ; 
    -> com.company.rest.service 
     -> class UserRestService : @Path("/users") 
     -> class CartRestService : @Path("/carts") 
Problemi correlati