2013-10-09 4 views
20

Я новичок в создании весеннего отдыха на основе ws. Я создал проект со следующей структурой.Как определить структуру пакета для приложения MVC Spring REST?

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) 

Я начал добавлять POJO, в пакете домена, но моя проблема в том, что у меня есть 2 вида POJOs в моем приложении. Один тип, соответствующий структуре таблицы приложений. Другой тип, соответствующий структуре результата третьей стороны.

Я не уверен, как я могу различать эти 2 типа POJO под моим пакетом домена.

ответ

34

большинство проектов выглядят так, как вы описали. Внутренний пакет домена будет иметь пользовательский пакет, в котором он будет иметь все связанные с пользователем поджы. На dao служба будет существовать и в тех же подпакетах.

Но организация, я считаю, что лучше всего разделить пакеты этот путь:

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

И так далее. Я впервые увидел это в разговоре с парнем из Spring Source. Я постараюсь найти видео.

Как бы то ни было, я работаю над проектом с этой стратегией в течение нескольких месяцев, и до сих пор кажется более организованным, чем традиционный способ .

Если пакет, например пользователи, становится слишком переполненным, вы всегда можете создавать субпакеты для организации внутри него. Но для большинства пакетов это будет 1 или 2 класса домена, один DAO и один сервис. Поэтому нет необходимости в дополнительных пакетах.

Обновление: Я думаю, что это видео: http://www.youtube.com/watch?v=tEm0USdF-70

+2

Эта шкала намного лучше, чем общий подход dao/controller/service/entity. В качестве примечания: каждый раз, когда я представляю это разработчикам, они шокированы (и, следовательно, не желают его попробовать), сколько пакетов eclipse отображается в его представлении с плоским пакетом (по умолчанию). Просто переключитесь на иерархическое представление, и вы в порядке. – atamanroman

+2

Имейте в виду, что если вы используете Spring и хотите создавать экземпляры только определенных типов классов (например, только модель без DAO), вы не сможете эффективно использовать функции сканирования компонентов. –

+0

Что такое usecase для создания экземпляров только определенных типов классов? (серьезный вопрос :)) –

5

Позволяет прийти думать из модуля/библиотеки точки зрения.

Хорошо иметь отдельную библиотеку бизнес-логики вне приложения, сохранять ее отдельно с тестовой библиотекой и библиотекой отдыха, чтобы охватить основную библиотеку бизнес-логики, используя функциональные возможности внутри основной бизнес-логики.

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")