赞
踩
无论是根据某马还是某谷的适配教程做项目时候,发现了大部分都是重复的crud,大部分只要做好笔记复习即可,但是却往往忘记了编码设计,所以这里开始复习编码设计,对象设计中,长期使用Mp的那一套导致就是Service Mapper,一套梭哈完了,这样很容易忘记基本功夫
简单Java对象(Plain Old Java Object)是指普通的Java对象,通常不继承特定的类或实现特定的接口。POJOs通常用于表示简单的数据对象,不包含业务逻辑。
人话说就是po是数据库的映射对象,需要做的就是,和数据库字段对应,包含对应属性即可(一般也就是mybatix生成的实体类)
@Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("tb_user") public class User implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @TableId(value = "uid", type = IdType.AUTO) private Integer uid; /** * 账户 */ private String username; /** * 密码 */ private String password; /** *盐 */ private String salt; /** * 姓名 */ private String uname; }
数据传输对象(Data Transfer Object)用于在不同层之间传输数据,通常用于解决多次远程调用或批量传输数据时的效率问题。DTOs通常是不可变的,并且只包含数据而不包含行为。
vo是dto的变种,而往往实际开发中大家更熟悉vo,vo是像前端返回需要的属性而编写的对象,那么dto就可以理解为各个层次需要的对象,比如前端不仅返回了用户信息里面还包含用户的社团信息,银行卡信息等
@Data @NoArgsConstructor @AllArgsConstructor public class UserDto { /** * 账户 */ private String username; /** * 姓名 */ private String uname; private String bankName; private String address; }
值对象(Value Object)是一种特殊的DTO,用于传输数据并且可以包含一些简单的业务逻辑。值对象通常是不可变的,并且通常用于传递一些相关数据的组合,而不是单个数据项。
//比如这里进行脱敏操作,查询用户信息,但是不能传递盐和密码等敏感信息 public class UserVO { /** * 账户 */ private String username; private Integer username; /** * 姓名 */ private String uname; }
实体对象在业务逻辑中表示业务实体或概念,通常与数据库表或持久化对象对应。实体对象包含业务逻辑,并且与特定的数据存储机制解耦。
这个就很有意思了 比如我有一张表,里面有很多冗余字段
(id作为数据自增主键 但是属性id由自己·公司的规则决定)
只需要自己需要的字段,一个表就能写多个实体类型,这样查询时候也不需要查询整个记录
@Data @Builder @AllArgsConstructor @NoArgsConstructor public class AwardEntity { /** 用户ID */ private String userId; /** 奖品ID */ private Integer awardId; } @Data @Builder @AllArgsConstructor @NoArgsConstructor public class RuleEntity { /**对应会员价格 */ private String price; /** 奖品描述 */ private Integer awardDescription; }
业务对象(Business Object)用于表示具有业务逻辑的对象。它们通常封装了一些复杂的业务规则和操作,并且可以包含对多个实体对象的操作。
比如mvc中常见的Service
但是值得注意的是实际我们可以再次分得更细一点现在大部分mvc架构中Service既包含了数据库处理也包含了业务处理,应该像DDD架构依次再次解耦,数据库处理得逻辑是@Repository标注的IRepository,业务逻辑才是交给Service
@Repository
public class StrategyRepository implements IStrategyRepository {
@Resource
private IStrategyAwardDao strategyAwardDao;
@Resource
private IRedisService redisService;
@Override
public List<StrategyAwardEntity> queryStrategyAwardList(Long strategyId) {
return 需要的实体类型;//不应该直接返回记录
}
}
数据访问对象(Data Access Object)用于封装对数据存储的访问和操作,通常用于执行数据库操作。DAOs通常与持久化对象(PO)一起使用,用于将数据持久化到数据库中或从数据库中检索数据。
也就是现在mybatis中的mapper层次
合理的设计对象和接口可以做到层层解耦,不应该在复杂的系统中一套MybatisPlus的模板梭哈到底
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。