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

相关推荐
一切尽在,你来17 小时前
C++多线程教程-1.2.3 C++并发编程的平台无关性
开发语言·c++
坚持就完事了17 小时前
Java中的一些关键字
java·开发语言
雨季66617 小时前
Flutter 三端应用实战:OpenHarmony “专注时光盒”——在碎片洪流中守护心流的数字容器
开发语言·前端·安全·flutter·交互
新缸中之脑17 小时前
Moltbook 帖子精选
开发语言·php
寄存器漫游者17 小时前
数据结构 C语言 顺序栈
java·c语言·数据结构
heartbeat..17 小时前
Redis 性能优化全指南:从基础配置到架构升级
java·redis·性能优化·架构
xyq202417 小时前
jQuery Mobile 表单选择
开发语言
青岑CTF17 小时前
攻防世界-Web_php_include-胎教版wp
开发语言·安全·web安全·网络安全·php
m0_7482331717 小时前
C#与C语言:5大核心语法共性
java·jvm·算法
JavaGuide17 小时前
推荐一个基于 Spring Boot 4.0 + Java 21 + Spring AI 2.0 的大模型项目!
java·spring boot·spring