<
学习笔记 Springboot 各层的含义和职责
>
上一篇

Android 打开自定义 scheme 的链接
下一篇

Android 依赖项注入 hilt

SpringBoot 各层的含义和职责

Controller (控制层,处理请求和响应) --> Service (服务层,业务逻辑) --> Repository (数据访问层,与数据库交互) --> DataBase (数据库层,MyBatis Ktorm Hibernate 等 ORM)

Domain (领域层,或 Model,数据库映射对象类,业务模型)

Dto (数据传输对象,在 Controller 响应时返回给客户端)


在 Spring Boot 和一般的分层架构中,通常会将应用程序的代码分为多个层次,以便于管理和维护

1. Controller

含义:控制层,负责处理 HTTP 请求和响应。

职责

示例

@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getUserById(@PathVariable Long id) {
        UserDto user = userService.getUserById(id);
        return ResponseEntity.ok(user);
    }
}

2. Service

含义:服务层,包含业务逻辑。

职责

示例

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public UserDto getUserById(Long id) {
        User user = userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found"));
        return new UserDto(user);
    }
}

3. Repository

含义:数据访问层,负责与数据库进行交互。

职责

示例

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByUsername(String username);
}

使用 MyBatis、Ktorm 的项目可以省略 Repository,直接在 Service 调用 Mapper

在一些应用中,Repository 和 DAO 的功能可能会重叠,特别是在简单的项目中,但在更复杂的系统中,它们的分离有助于提高可维护性和可测试性。

4. Domain(或 Model)

含义:领域层,定义业务模型。

职责

示例

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;

    // Getter 和 Setter
}

5. DTO(Data Transfer Object)

含义:数据传输对象,专门用于在不同层之间传输数据。

职责

示例

public class UserDto {
    private Long id;
    private String username;

    public UserDto(User user) {
        this.id = user.getId();
        this.username = user.getUsername();
    }

    // Getter 和 Setter
}
Top
Foot