前置条件

在开发之前,请确保

介绍

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

应用层Service主要有以下特性:

  1. 负责事务处理,所以事务的注解可以在这一层的service中使用。
  2. 不做单元测试,只做验收测试。
  3. 可能会有比较多的依赖组件(领域服务),使用field注入依赖的组件。
  4. 方法要求无状态,只接受dto元数据类型作为参数。

Service 接口类

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

UserService.java 代码

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

TaskService.java 代码

  1. package io.choerodon.todo.app.service;
  2. import io.choerodon.todo.infra.dto.TaskDTO;
  3. public interface TaskService {
  4. TaskDTO createOne(TaskDTO taskDTO);
  5. TaskDTO queryById(Long id);
  6. TaskDTO queryByTaskNumber(String taskNumber);
  7. TaskDTO update(TaskDTO taskDTO);
  8. void deleteById(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 UserMapper userMapper;
  6. public UserServiceImpl(UserMapper userMapper) {
  7. this.userMapper = userMapper;
  8. }
  9. @Override
  10. public UserDTO createOne(UserDTO userDTO) {
  11. if (userMapper.insert(userDTO) != 1) {
  12. throw new CommonException("error.user.insert");
  13. }
  14. return userDTO;
  15. }
  16. }

TaskServiceImpl.java 代码

  1. package io.choerodon.todo.app.service.impl;
  2. // 省略import
  3. @Service
  4. public class TaskServiceImpl implements TaskService {
  5. private TaskMapper taskMapper;
  6. public TaskServiceImpl(TaskMapper taskMapper) {
  7. this.taskMapper = taskMapper;
  8. }
  9. @Override
  10. public TaskDTO createOne(TaskDTO taskDTO) {
  11. if (taskMapper.insert(taskDTO) != 1) {
  12. throw new CommonException("error.task.insert");
  13. }
  14. return taskDTO;
  15. }
  16. @Override
  17. public TaskDTO queryById(Long id) {
  18. return taskMapper.selectByPrimaryKey(id);
  19. }
  20. @Override
  21. public TaskDTO queryByTaskNumber(String taskNumber) {
  22. return taskMapper.queryByTaskNumber(taskNumber);
  23. }
  24. @Override
  25. public TaskDTO update(TaskDTO taskDTO) {
  26. if (taskMapper.updateByPrimaryKeySelective(taskDTO) != 1) {
  27. throw new CommonException("error.task.update");
  28. }
  29. return queryById(taskDTO.getId());
  30. }
  31. @Override
  32. public void deleteById(Long id) {
  33. taskMapper.deleteByPrimaryKey(id);
  34. }
  35. }