当前位置: 首页 > news >正文

JAVA程序设计-对象设计

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

POJO:

简单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;}

DTO:

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

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

@Data
@NoArgsConstructor
@AllArgsConstructorpublic class UserDto  {/*** 账户*/private String username;/*** 姓名*/private String uname;private String bankName;private String address;}

vo

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

//比如这里进行脱敏操作,查询用户信息,但是不能传递盐和密码等敏感信息
public class UserVO  {/*** 账户*/private String username;private Integer username;/*** 姓名*/private String uname;}

Entity

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

这个就很有意思了 比如我有一张表,里面有很多冗余字段
(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;}

BO

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

比如mvc中常见的Service

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

@Repository
public class StrategyRepository implements IStrategyRepository {@Resourceprivate IStrategyAwardDao strategyAwardDao;@Resourceprivate IRedisService redisService;@Overridepublic List<StrategyAwardEntity> queryStrategyAwardList(Long strategyId) {return 需要的实体类型;//不应该直接返回记录}}

DAO

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

也就是现在mybatis中的mapper层次

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

http://www.lryc.cn/news/341049.html

相关文章:

  • 蓝桥杯2024年第十五届省赛真题-R 格式
  • Linux服务器硬件及RAID配置
  • 前端 vue单页面中请求数量过多问题 控制单页面请求并发数
  • HarmonyOS开发实例:【分布式手写板】
  • Unity TMP Inputfield 输入框 框选 富文本 获取真实定位
  • 如何在原生项目中集成flutter
  • 【设计模式】策略模式
  • Java面试八股之Iterator和ListIterator的区别是什么
  • 服务器中毒怎么办?企业数据安全需重视
  • k8s使用harbor私有仓库镜像 —— 筑梦之路
  • tcp bbr pacing 的对与错
  • MySQL学习-非事务相关的六大日志、InnoDB的三大特性以及主从复制架构
  • 【软件测试】MIL/HIL/PIL/SIL测试
  • WebKit结构深度解析:打造高效与安全的浏览器引擎
  • SQLSERVER对等发布问题处理
  • CentOS 7 中时间快了 8 小时
  • itext7 pdf转图片
  • 搜维尔科技:Manus Xsens Metagloves新一代手指捕捉
  • Python与Redis:提升性能,确保可靠性,掌握最佳实践
  • GPT国内能用吗
  • 中科亿海微-CL1656功能验证开发板
  • 学习STM32第十五天
  • 【面试题】MySQL 事务的四大特性说一下?
  • 案例实践 | InterMat:基于长安链的材料数据发现与共享系统
  • 【数据挖掘】实验8:分类与预测建模
  • go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
  • Go 单元测试之Mysql数据库集成测试
  • Prometheus + Grafana 搭建监控仪表盘
  • 机器人管理系统的增删查改(Python)
  • 【.Net动态Web API】背景与实现原理