• 前置条件
    • 介绍
    • Service 接口类
      • UserService.java 代码
      • TaskService.java 代码
    • Service 实现类
      • UserServiceImpl.java 代码
      • UserServiceImpl.java 代码
      • TaskServiceImpl.java 代码

    前置条件

    在开发之前,请确保

    • 本地项目已经创建成功,详见 新建项目
    • 数据库创建成功,详见 初始化数据库

    介绍

    demo需涉及到app层的service接口类与其实现类。

    service 调用领域对象或服务来解决问题,应用层Service主要有以下特性:

    • 负责事务处理,所以事务的注解可以在这一层的service中使用。
    • 只处理非业务逻辑,重点是调度业务处理流程。业务逻辑处理一定要放在领域层处理。
    • 不做单元测试,只做验收测试。
    • 可能会有比较多的依赖组件(领域服务),使用field注入依赖的组件。
    • 方法要求无状态,只接受dto元数据类型作为参数。

    Service 接口类

    • Service 接口类定义了业务操作的一系列接口,并不提供实现,具体实现需要通过服务实现层提供,所以属于供应方的服务接口层。创建在项目模块的 xxx.app.service 包下。

    UserService.java 代码

    1. package io.choerodon.todo.app.service;
    2. import io.choerodon.todo.api.dto.UserDTO;
    3. public interface UserService {
    4. UserDTO create(UserDTO userDTO);
    5. }

    TaskService.java 代码

    1. package io.choerodon.todo.app.service;
    2. import io.choerodon.todo.api.dto.TaskDTO;
    3. public interface TaskService {
    4. TaskDTO create(TaskDTO taskDTO);
    5. void deleteById(Long id);
    6. void deleteByTaskNumber(String taskNumber);
    7. TaskDTO update(TaskDTO taskDTO);
    8. TaskDTO queryById(Long id);
    9. }

    Service 实现类

    • Service 接口的具体实现通过服务实现层提供,所以属于供应方的服务实现层。创建在项目模块的 xxx.app.service.impl 包下。
    • 实现类,需要用 @Service 标注

    UserServiceImpl.java 代码

    1. package io.choerodon.todo.app.service.impl;
    2. // 省略 import
    3. @Service
    4. public class UserServiceImpl implements UserService {
    5. private UserRepository userRepository;
    6. private UserConvertor userConvertor;
    7. public UserServiceImpl(UserRepository userRepository, UserConvertor userConvertor) {
    8. this.userRepository = userRepository;
    9. this.userConvertor = userConvertor;
    10. }
    11. @Override
    12. public UserDTO create(UserDTO userDTO) {
    13. return userConvertor.entityToDto(
    14. userRepository.create(userConvertor.dtoToEntity(userDTO))
    15. );
    16. }
    17. }

    UserServiceImpl.java 代码

    1. package io.choerodon.todo.app.service.impl;
    2. // 省略 import
    3. @Service
    4. public class UserServiceImpl implements UserService {
    5. private UserRepository userRepository;
    6. private UserConvertor userConvertor;
    7. public UserServiceImpl(UserRepository userRepository, UserConvertor userConvertor) {
    8. this.userRepository = userRepository;
    9. this.userConvertor = userConvertor;
    10. }
    11. @Override
    12. public UserDTO create(UserDTO userDTO) {
    13. return userConvertor.entityToDto(
    14. userRepository.create(userConvertor.dtoToEntity(userDTO))
    15. );
    16. }
    17. }

    TaskServiceImpl.java 代码

    1. package io.choerodon.todo.app.service.impl;
    2. // 省略 import
    3. @Service
    4. public class TaskServiceImpl implements TaskService {
    5. private TaskRepository taskRepository;
    6. private TaskConvertor taskConvertor;
    7. public TaskServiceImpl(TaskRepository taskRepository, TaskConvertor taskConvertor) {
    8. this.taskRepository = taskRepository;
    9. this.taskConvertor = taskConvertor;
    10. }
    11. @Override
    12. public TaskDTO create(TaskDTO taskDTO) {
    13. return taskConvertor.entityToDto(
    14. taskRepository.create(taskConvertor.dtoToEntity(taskDTO)));
    15. }
    16. @Override
    17. public void deleteById(Long id) {
    18. taskRepository.deleteById(id);
    19. }
    20. @Override
    21. public void deleteByTaskNumber(String taskNumber) {
    22. taskRepository.deleteByTaskNumber(taskNumber);
    23. }
    24. @Override
    25. public TaskDTO update(TaskDTO taskDTO) {
    26. return taskConvertor.entityToDto(
    27. taskRepository.update(taskConvertor.dtoToEntity(taskDTO)));
    28. }
    29. @Override
    30. public TaskDTO queryById(Long id) {
    31. return taskConvertor.entityToDto(taskRepository.queryById(id));
    32. }
    33. }