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

相关推荐
章豪Mrrey nical2 小时前
前后端分离工作详解Detailed Explanation of Frontend-Backend Separation Work
后端·前端框架·状态模式
超级大只老咪3 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
小浣熊熊熊熊熊熊熊丶3 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长3 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子3 小时前
JDK 安装配置
java·开发语言
星哥说事3 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
派大鑫wink4 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII4 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home4 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
等....4 小时前
Miniconda使用
开发语言·python