三层架构
满足单一职责原则。
- Controller控制层:接收前端发送的请求,对请求进行处理并响应数据。
- Service业务逻辑层:处理具体的业务逻辑。
- Dao数据访问层(持久层):负责数据访问操作,包括数据的增删改查。
- 浏览器发过来请求,首先访问Controller层,Controller调用Service层,Service层调用Dao层。架构例子如下。
三层架构的例子
// 一个读取文件数据并解析成JSON的例子
@RestController
public class UserController {@RequestMapping("/list")public List<User> list() throws Exception {//1.加载并读取user.txt文件,获取用户InputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt");ArrayList<String> lines = IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>());//2.解析用户信息,封装User对象到List集合中List<User> userList = lines.stream().map(line -> {String[] parts = line.split(",");Integer id = Integer.parseInt(parts[0]);String username = parts[1];String password = parts[2];String name = parts[3];Integer age = Integer.parseInt(parts[4]);LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));return new User(id, username, password, name, age, updateTime);}).collect(Collectors.toList());//3.将List集合转换为JSON格式的字符串,并返回return userList;}
}
现在将其拆分。
public interface UserDao {/*** 加载用户数据* @return*/public List<String> findAll();
}
///////////////////////////////////////
public class UserDaoImpl implements UserDao {@Overridepublic List<String> findAll() {//1.加载并读取user.txt文件,获取用户InputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt");ArrayList<String> lines = IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>());return lines;}
}
///////////////////////////////////////
public interface UserService {/*** 查询所有用户信息* @return*/public List<User> findAll();
}
///////////////////////////////////////
public class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();@Overridepublic List<User> findAll() {List<String> lines = userDao.findAll();List<User> userList = lines.stream().map(line -> {String[] parts = line.split(",");Integer id = Integer.parseInt(parts[0]);String username = parts[1];String password = parts[2];String name = parts[3];Integer age = Integer.parseInt(parts[4]);LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));return new User(id, username, password, name, age, updateTime);}).collect(Collectors.toList());return userList;}
}
///////////////////////////////////////
@RestController
public class UserController {private UserService userService = new UserServiceImpl();@RequestMapping("/list")public List<User> list() throws Exception {List<User> userList = userService.findAll();//3.将List集合转换为JSON格式的字符串,并返回return userList;}
}