抖音项目开发小计02 | 青训营笔记

149 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记,此系列笔记主要记录我们队伍在开发抖音项目过程中遇到的一些问题以及思考

项目分析

首先拿到需求文档,首先进行的就应该是项目结构的拆分以及项目开发模式的确定,我们小组经过讨论最后选定了常见的MVC模式,进行本项目的开发

目录结构

  • controller: 处理客户端消息
  • dao: 封装数据库操作
  • module: 对所有返回的响应字段,利用结构体进行封装
  • service: 处理业务逻辑
  • tools: 封装复用率比较高的操作,如JWT的生成等操作
  • .sql: 不同版本的创建数据库脚本
  • router.go: 定义路由规则
  • main.go: 运行入口

一些思考

最近在读设计模式之美一书,其中对MVC这种开发模式的看法,引起了我的一些思考,在如当前项目这种简单的项目时,使用MVC这种开发模式无疑是效率最高的,但MVC带来的缺点也是不可忽视的,在设计模式一书中,作者提到MVC模式是一种违反面向对象编程风格的模式,这种模式实际上是一种彻彻底底的面向过程的编程风格,下面贴一段书中的代码来结合代码说明一下


////////// Controller+VO(View Object) //////////
public class UserController {
private UserService userService; //通过构造函数或者IOC框架注入

public UserVo getUserById(Long userId) {
  UserBo userBo = userService.getUserById(userId);
  UserVo userVo = [...convert userBo to userVo...];
  return userVo;
}
}

public class UserVo {//省略其他属性、get/set/construct方法
private Long id;
private String name;
private String cellphone;
}

////////// Service+BO(Business Object) //////////
public class UserService {
private UserRepository userRepository; //通过构造函数或者IOC框架注入

public UserBo getUserById(Long userId) {
  UserEntity userEntity = userRepository.getUserById(userId);
  UserBo userBo = [...convert userEntity to userBo...];
  return userBo;
}
}

public class UserBo {//省略其他属性、get/set/construct方法
private Long id;
private String name;
private String cellphone;
}

////////// Repository+Entity //////////
public class UserRepository {
public UserEntity getUserById(Long userId) { //... }
}

public class UserEntity {//省略其他属性、get/set/construct方法
private Long id;
private String name;
private String cellphone;
}

平时开发 Web 后端项目的时候,基本上都是这么组织代码的.其中,UserEntity 和 UserRepository 组成了数据访问层,UserBo 和 UserService 组成了业务逻辑层,UserVo 和 UserController 在这里属于接口层.从代码中,我们可以发现,UserBo 是一个纯粹的数据结构,只包含数据,不包含任何业务逻辑.业务逻辑集中在 UserService 中.我们通过 UserService 来操作 UserBo。换句话说,Service 层的数据和业务逻辑,被分割为 BO 和 Service 两个类中.像 UserBo 这样,只包含数据,不包含业务逻辑的类,就叫作贫血模型(Anemic Domain Model).同理,UserEntity、UserVo 都是基于贫血模型设计的.这种贫血模型将数据与操作分离,破坏了面向对象的封装特性,是一种典型的面向过程的编程风格

上面这段话摘自设计模式之美一书中第11节内容,设计模式之美中关于面向对象部分的内容带给我很大的启发,让我明白要在今后写代码的过程中多思考,而不是单纯的写,避免出现这种用着面向对象语言却还一直在写面向过程风格的代码的事情