JAVA程序设计-对象设计

无论是根据某马还是某谷的适配教程做项目时候,发现了大部分都是重复的crud,大部分只要做好笔记复习即可,但是却往往忘记了编码设计,所以这里开始复习编码设计,对象设计中,长期使用Mp的那一套导致就是Service Mapper,一套梭哈完了,这样很容易忘记基本功夫

POJO:

简单Java对象(Plain Old Java Object)是指普通的Java对象,通常不继承特定的类或实现特定的接口。POJOs通常用于表示简单的数据对象,不包含业务逻辑。

人话说就是po是数据库的映射对象,需要做的就是,和数据库字段对应,包含对应属性即可(一般也就是mybatix生成的实体类)

java 复制代码
@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;




}

DTO:

数据传输对象(Data Transfer Object)用于在不同层之间传输数据,通常用于解决多次远程调用或批量传输数据时的效率问题。DTOs通常是不可变的,并且只包含数据而不包含行为。

vo是dto的变种,而往往实际开发中大家更熟悉vo,vo是像前端返回需要的属性而编写的对象,那么dto就可以理解为各个层次需要的对象,比如前端不仅返回了用户信息里面还包含用户的社团信息,银行卡信息等

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor

public class UserDto  {

 

 

    /**
     * 账户
     */
    private String username;




    /**
     * 姓名
     */
    private String uname;
	private String bankName;
	private String address;




}

vo

值对象(Value Object)是一种特殊的DTO,用于传输数据并且可以包含一些简单的业务逻辑。值对象通常是不可变的,并且通常用于传递一些相关数据的组合,而不是单个数据项。

java 复制代码
//比如这里进行脱敏操作,查询用户信息,但是不能传递盐和密码等敏感信息
public class UserVO  {

 

 

    /**
     * 账户
     */
    private String username;

  private Integer username;


    /**
     * 姓名
     */
    private String uname;





}

Entity

实体对象在业务逻辑中表示业务实体或概念,通常与数据库表或持久化对象对应。实体对象包含业务逻辑,并且与特定的数据存储机制解耦。

这个就很有意思了 比如我有一张表,里面有很多冗余字段

(id作为数据自增主键 但是属性id由自己·公司的规则决定)

只需要自己需要的字段,一个表就能写多个实体类型,这样查询时候也不需要查询整个记录

java 复制代码
@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;

}

BO

业务对象(Business Object)用于表示具有业务逻辑的对象。它们通常封装了一些复杂的业务规则和操作,并且可以包含对多个实体对象的操作。

比如mvc中常见的Service

但是值得注意的是实际我们可以再次分得更细一点现在大部分mvc架构中Service既包含了数据库处理也包含了业务处理,应该像DDD架构依次再次解耦,数据库处理得逻辑是@Repository标注的IRepository,业务逻辑才是交给Service

java 复制代码
@Repository
public class StrategyRepository implements IStrategyRepository {

    @Resource
    private IStrategyAwardDao strategyAwardDao;
    @Resource
    private IRedisService redisService;

    @Override
    public List<StrategyAwardEntity> queryStrategyAwardList(Long strategyId) {
      return 需要的实体类型;//不应该直接返回记录
    }
    }

DAO

数据访问对象(Data Access Object)用于封装对数据存储的访问和操作,通常用于执行数据库操作。DAOs通常与持久化对象(PO)一起使用,用于将数据持久化到数据库中或从数据库中检索数据。

也就是现在mybatis中的mapper层次

合理的设计对象和接口可以做到层层解耦,不应该在复杂的系统中一套MybatisPlus的模板梭哈到底

相关推荐
糯米团子7491 分钟前
javascript高频知识点
开发语言·前端·javascript
January12072 分钟前
IDEA 快捷键
java·ide·intellij-idea
周杰伦fans6 分钟前
C# 异常继承深度解析:从设计原则到 sealed 关键字的奥秘
java·jvm·c#
搬石头的马农7 分钟前
从零配置Claude自动修Bug:6步打造全自动开发流程
java·人工智能·python·bug·ai编程
小马爱打代码14 分钟前
Redis Key 过期后会立刻删除吗?过期删除与内存淘汰策略详解
java·redis·缓存
Wonderful U16 分钟前
基于Python+Django的在线题库与智能阅卷系统:从痛点分析到完整实现
开发语言·python·django
码语智行16 分钟前
拦截器、接口限流、过滤器、防重发/幂等性功能说明
开发语言·网络·python
liulilittle20 分钟前
麻将牌堆渲染(Lua)
开发语言·lua
鱼鳞_21 分钟前
苍穹外卖-Day10(Spring task)
java·后端·spring
雨落在了我的手上30 分钟前
初始java(十七):常⽤⼯具类介绍
java·开发语言