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的模板梭哈到底

相关推荐
木向5 分钟前
leetcode22:括号问题
开发语言·c++·leetcode
comli_cn7 分钟前
使用清华源安装python包
开发语言·python
筑基.13 分钟前
basic_ios及其衍生库(附 GCC libstdc++源代码)
开发语言·c++
m0_7482451727 分钟前
Web第一次作业
java
小码的头发丝、27 分钟前
Java进阶学习笔记|面向对象
java·笔记·学习
雨颜纸伞(hzs)28 分钟前
C语言介绍
c语言·开发语言·软件工程
J总裁的小芒果30 分钟前
THREE.js 入门(六) 纹理、uv坐标
开发语言·javascript·uv
m0_5485147730 分钟前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript
坊钰1 小时前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表