- 博客(14)
- 收藏
- 关注
原创 Mybatis-Plus 从入门到精通
在演示UpdateWrapper的案例中,我们在代码中编写了更新的SQL语句:这种写法在某些企业也是不允许的,因为SQL语句最好都维护在持久层,而不是业务层。就当前案例来说,由于条件是in语句,只能将SQL写在Mapper.xml文件,利用foreach来生成动态SQL。这实在是太麻烦了。假如查询条件更复杂,动态SQL的编写也会更加复杂。所以,MybatisPlus提供了自定义SQL功能,可以让我们利用Wrapper生成查询条件,再结合Mapper.xml编写SQL2.2.1.基本用法@Test。
2024-08-16 11:32:19
1105
原创 设计原则与思想:规范与重构 理论一 - 三 什么情况下要重构?到底重构什么?又该如何重构?有哪些非常能落地的技术手段?如何写出可测试性好的代码?
单元测试定义(解答了为什么我们都假设外部依赖返回都是我们预期结果?):单元测试主要是测试程序员自己编写的代码逻辑的正确性,并非是端到端的集成测试,它不需要测试所依赖的外部系统(分布式锁、WalletRPC 服务)的逻辑正确性。所以,如果代码中依赖了外部系统或者不可控组件,比如,需要依赖数据库、网络通信、文件系统等,那我们就需要将被测代码与外部系统解依赖,而这种解依赖的方法就叫作“mock”。所谓的 mock 就是用一个“假”的服务替换真正的服务。mock 的服务完全在我们的控制之下,模拟输出我们想要的数据。
2024-08-14 20:17:00
1105
原创 设计原则与思想:设计原则(下)- 理论五 - 八 控制反转、依赖反转、依赖注入这三者有何区别和联系?为何说KISS、YAGNI原则为何经常被用错?重复的代码就一定违背DRY吗?如何用迪米特法则?
我们通过依赖注入框架提供的扩展点,简单配置一下所有需要的类及其类与类之间依赖关系,就可以实现由框架来自动创建对象、管理对象的生命周期、依赖注入等原本需要程序员来做的事情。我们在第一次写代码的时候,如果当下没有复用的需求,而未来的复用需求也不是特别明确,并且开发可复用代码的成本比较高,那我们就不需要考虑代码的复用性。KISS 原则讲的是“如何做”的问题(尽量保持简单),而 YAGNI 原则说的是“要不要做”的问题(当前不需要的就不要做)。我们可以不写可复用的代码,但一定不能写重复的代码。
2024-08-13 16:15:40
1024
原创 设计原则与思想:设计原则(上) 理论一 - 四 如何理解单一职责原则?如何做到“对扩展开放、修改关闭”?里式替换跟多态有何区别?接口隔离原则有哪三种应用?
在写代码的时候,我们要多花点时间思考一下,这段代码未来可能有哪些需求变更,如何设计代码结构,事先留好扩展点,以便在未来需求变更的时候,在不改动代码整体结构、做到最小代码改动的情况下,将新的代码灵活地插入到扩展点上。不同的应用场景、不同阶段的需求背景、不同的业务层面,对同一个类的职责是否单一,可能会有不同的判定结果。最常用来提高代码扩展性的方法有:多态、依赖注入、基于接口而非实现编程,以及大部分的设计模式(比如,装饰、策略、模板、职责链、状态)。类依赖的其他类过多,或者依赖类的其他类过多。
2024-08-12 10:58:47
872
原创 理论五 - 七 接口和抽象类的区别、为什么基于接口而非实现编程、为何说要多用组合少用继承
如何解读原则中的“接口”二字?“基于接口而非实现编程”,这条原则的另一个表述方式,是“基于抽象而非实现编程”。从本质上来看,“接口”就是一组“协议”或者“约定”,是功能提供者提供给使用者的一个“功能列表”。在编程语言里实现为编程语言中的接口或者抽象类。如何将这条原则应用到实战中?我们在做软件开发的时候,一定要有抽象意识、封装意识、接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性、扩展性、可维护性。总结一下,我们在做软件开发的时候,一定要有抽象意识、封装意识、接口意识。
2024-08-11 11:03:06
1241
原创 理论四:哪些代码设计看似是面向对象,实际是面向过程的?
概述:在面向对象编程中,常见的全局变量有单例类对象、静态成员变量、常量等,常见的全局方法有静态方法。静态成员变量归属于类上的数据,被所有的实例化对象所共享,也相当于一定程度上的全局变量。而常量是一种非常常见的全局变量,比如一些代码中的配置参数,一般都设置为常量,放到一个 Constants 类中。你可以联想一下我们常用的各种 Utils 类,里面的方法一般都会定义成静态方法,可以在不用创建对象的情况下,直接拿来使用。这些全局变量和全局方法中,Constants 类和 Utils 类最常用到。
2024-08-10 11:19:25
536
原创 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗?
OOP 风格的代码更易复用、易扩展、易维护。OOP 语言更加人性化、更加高级、更加智能。OOP 更加能够应对大规模复杂程序的开发。
2024-08-08 10:00:49
576
原创 理论二:封装、抽象、继承、多态分别可以解决哪些编程问题?
关于封装特性(也叫作信息隐藏或者数据访问保护)目的:封装特性存在的意义,一方面是保护数据不被随意修改,提高代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。实现:类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。它需要编程语言提供权限访问控制语法来支持,例如Java 中的 private、protected、public 关键字。关于抽象特性目的:抽象存在的意义,一方面是提高代码的可扩展性、维护性,修改实现不需要改变定义,少代码的改动范围;另一
2024-08-07 12:00:00
380
转载 后端必备的 Git Commit Message规范指南-直接食用
IDEA中规范使用Git Commit Message,包括插件安装、使用和讲解,通过git hooks进行校验。
2024-08-06 10:24:56
340
原创 理论一:当谈论面向对象的时候,我们到底在谈论什么?
如果放宽要求的话,只要某种编程语言支持类、对象语法机制,那基本上就可以说这种编程语言是面向对象编程语言了,不一定非得要求具有所有的四大特性。面向对象编程一般使用面向对象编程语言来进行,但是,不用面向对象编程语言,我们照样可以进行面向对象编程。反过来讲,即便我们使用面向对象编程语言,写出来的代码也不一定是面向对象编程风格的,也有可能是面向过程编程风格的。面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。什么是面向对象编程语言?
2024-08-06 10:12:27
253
原创 设计模式之美-导读
目的:本质上都是服务于编写高质量代码这一件事的(也就是前面说的七个标准)贯穿全文的目标。主观性很强,评判维度很多,我们就以代码好不好改为准。如何才能写出高质量的代码?如何评价代码质量的高低?
2024-08-05 12:11:26
588
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人