如何为Spring REST MVC应用程序定义包结构?

use*_*433 25 rest spring spring-mvc project-structure

我是新来写一个基于ws的春季休息.我创建了一个具有以下结构的项目.

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)
Run Code Online (Sandbox Code Playgroud)

我开始在域包中添加POJO,但我的问题是我的应用程序中有2种POJO.一种类型,对应于我的应用程序表结构.另一种对应于第三方结果结构的类型.

我不确定如何在我的域包下区分这两种POJO类型.

dig*_*_mb 40

大多数项目看起来像你描述的.内部域包将有一个用户包,它将具有所有用户相关的pojos.在dao上,服务也将存在相同的子包.

但我认为最好的组织就是这样拆分包:

-com.company.project
    - users
         UserService
         UserDAO
         User
         Role
    - cart
         Cart
         CartService
         CartDAO
         ShopItem
Run Code Online (Sandbox Code Playgroud)

它就这样了.我第一次看到来自Spring Source的人的谈话.我会尝试找到这个视频.

无论如何,我正在用这个策略开展一个项目几个月,直到现在它似乎比传统方式更有条理.

如果包(例如用户)变得过于拥挤,您始终可以创建子包以在其中进行组织.但对于大多数软件包,它将是1或2个域类,一个DAO和一个服务.所以不需要更多的包裹.

更新:我认为这是视频:http://www.youtube.com/watch?v = tEm0USdF-70

  • 请记住,如果您使用的是Spring并且只想实例化特定类型的类(比如只有没有DAO的模型),则无法有效地使用组件扫描. (3认同)
  • 这比通用dao /控制器/服务/实体方法更好地扩展.作为旁注:每次我向开发人员介绍它时,他们都会感到震惊(因此不愿意尝试)在他的扁平包视图中显示了多少eclipse包(默认).只需切换到分层表示,你就可以了. (2认同)

小智 8

让我们从模块/库的角度来思考.

很高兴在应用程序之外分离核心业务逻辑库,将其与测试库分开,并通过利用核心业务逻辑内部的功能来使用其他库来包含核心业务逻辑库.

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")
Run Code Online (Sandbox Code Playgroud)