【问题标题】:What is the recommended project structure for spring boot rest projects? [closed]Spring Boot Rest 项目的推荐项目结构是什么? [关闭]
【发布时间】:2017-04-15 14:20:36
【问题描述】:

我是弹簧靴的初学者。我参与了一个项目的开始,我们将使用 Spring Boot 构建休息服务。您能否建议在构建仅公开休息服务的项目时遵循推荐的目录结构?

【问题讨论】:

标签: java spring rest spring-boot


【解决方案1】:

虽然这个问题有一个公认的答案,但我仍然想分享我的 RESTful 服务项目结构。

src/main/java
    +- com
        +- example
            +- Application.java
            +- ApplicationConstants.java
                +- configuration
                |   +- ApplicationConfiguration.java
                +- controller
                |   +- ApplicationController.java
                +- dao
                |   +- impl
                |   |   +- ApplicationDaoImpl.java
                |   +- ApplicationDao.java
                +- dto
                |   +- ApplicationDto.java
                +- service
                |   +- impl
                |   |   +- ApplicationServiceImpl.java
                |   +- ApplicationService.java
                +- util
                |   +- ApplicationUtils.java
                +- validation
                |   +- impl
                |   |   +- ApplicationValidationImpl.java
                |   +- ApplicationValidation.java

DAO = 数据访问对象。
DTO = 数据传输对象。

【讨论】:

  • 我喜欢您的回答以及它的呈现方式。除了你列出的那些之外,我几乎总是有一个存储库或数据库包
  • 在这种情况下验证类通常是什么?
  • 我强烈建议不要使用 MyClassImpl 和 MyClass 模式。需要时应引入抽象。因此,从一个具体的实现 MyClass 开始,如果/曾经需要,您可以随时提取接口,并为“Impl”以外的特定实现提供正确的名称
  • 这样的结构似乎不错,有一段时间了......对于配置、实用程序和验证类,它可以有这种结构,但对于其他人来说,当有很多业务用例时,最好去使用this answer 中显示的文档结构,否则将导致单个包(或多个子包)中有很多类。
  • 我目前正在处理具有上述结构的legacy project,这使得开发新功能变得困难。它包含上百个控制器、服务和其他,这使得包不可读,需要搜索整个项目以保持约定。像this 这样的结构将单个所需功能的业务逻辑保留在单个包中。
【解决方案2】:

来自docs:,这是推荐的方式

【讨论】:

  • 那么在这个例子中是客户和订单文件夹还是包裹?
  • 包。但是对于其中包含 java 类的文件夹来说,包只是一个花哨的 java 词。
  • 惊讶了很多票,有了这个结构包可以扩展部门/模块,看起来也和我们通常使用的有点不同,例如。 @Subhasish 回答,这又是开发人员/团队的偏好
  • 可能是作者只是为了说明目的,标题写着2.2. Locating the Main Application Class
  • @RaviParekh 这就是推荐它的原因。我们处理的是特征而不是层。这在许多其他框架中很常见。
【解决方案3】:

您确实不需要需要做任何特别的事情才能开始。从一个普通的 java 项目开始,maven 或 gradle 或 IDE 项目布局与 starter 依赖项。

按照指南here,您只需要一门主课,然后休息...

没有受限的包结构。实际结构将由您的需求/心血来潮驱动,目录结构由 build-tool / IDE 放置

您可以采用与 Spring MVC 应用程序相同的结构。

你可以选择任何一种方式

  • 一个项目分为几层:

    例如:DDD 风格

    • 服务层:服务包包含服务类
    • DAO/REPO 层:包含 dao 类的 dao 包
    • 实体层



    任何适合您正在编写问题的问题的层结构。

  • 一个项目被划分为模块或功能或特性,一个模块被划分为像上面这样的层

我更喜欢第二种,因为它遵循业务上下文。从概念的角度思考。

你做什么取决于你如何看待这个项目。这是你的代码组织能力。

【讨论】:

  • 是的,谢谢,但我想知道如何在我的项目中打包不同的对象?我在哪里放置模型、服务(如果需要)、dao 对象和 impl 类?
  • 你可以遵循你在 spring mvv 中遵循的相同结构..
  • 你能告诉我 DTO 对象应该放在哪里吗?在 Service 中,在带有实体和 dao/repo 的持久层中,在带有控制器和前端的 Web 层中,还是其他?
  • 定义一个包并保留它。层只是抽象概念,可帮助您构建思想的概念模型。
  • @theBeacon 谢谢,那么安全性呢?拆分文件或存储在单独的文件夹中?这是我的问题:stackoverflow.com/questions/48599378/…你能回答吗?
【解决方案4】:

config - 将从属性文件中读取的类

cache - 缓存机制类文件

constants - 常量定义类

控制器 - 控制器类

异常 - 异常类

模型 - 将出现 pojos 类

安全 - 安全类

服务 - 实现类

util - 实用程序类

验证 - 验证器类

bootloader - 主类

【讨论】:

【解决方案5】:

使用 Link-1 生成项目。这是一个基本的学习项目。您可以了解文件夹结构。 使用 Link-2 创建一个基本的 Spring Boot 项目。 1:http://start.spring.io/ 2:https://projects.spring.io/spring-boot/

创建一个 gradle/maven 项目 自动创建 src/main/java 和 src/main/test。创建 controller/service/Repository 包并开始编写代码。

-src/main/java(源文件夹) ---com.package.service(包) ---服务类(类) ---com.package.controller(包) ---ControllerClass(类)

【讨论】:

  • 是的,谢谢,但我想知道如何在我的项目中打包不同的对象?我在哪里放置模型、服务(如果需要)、dao 对象和 impl 类?
  • 是的,如果您要编写任何服务,请将其放在服务包下。结构看起来像这样。 -src/main/java(源文件夹)
  • -src/main/java(源文件夹)
【解决方案6】:

请使用 Spring Tool Suite(基于 Eclipse 的开发环境,为开发 Spring 应用程序而定制)。
创建一个 Spring Starter 项目,它将为您创建带有 spring boot maven 依赖项的目录结构。

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多