- 博客(42)
- 收藏
- 关注

原创 原创 | 使用JPA实现DDD持久化-JPA vs MyBatis
除了JPA之外,还有一个流行的数据访问框架MyBatis,算是个半自动化的ORM框架。1. JPA和MyBatis的比较JPA是个全自动化的对象持久化规范,它使得开发人员只需要针对领域模型编写面向对象的代码,而不必关心底层数据存储和SQL查询;而MyBatis则是一个能够灵活编写SQL语句,并将SQL的入参和查询结果映射成POJOs的一个持久层框架。所以,从表面上看,JPA能方便、自动化更强,而MyBatis 在SQL语句编写方面则更灵活自由。本质上看,JPA是面向对象的,而MyBatis是面向关系的
2020-09-29 16:53:15
1054

原创 原创 | 使用JPA实现DDD持久化-JPA,Hibernate与Spring Data JPA
2002年,Martin Fowler在他的名著《企业应用架构模式》中首次提出“数据映射器(Data Mapper)”模式,将面向对象的领域模型映射到关系数据库中。2003年,澳大利亚程序员Gavin King,数据系统素人,因为嫌弃EJB Entity Bean 1.1的架构复杂,自行开发了一个对象关系映射框架Hibernate。值得一提的是,此前他从未用SQL开发过任何系统。为了开发Hibernate,他临时去书店买了一个SQL基础的书。现在Hibernate已经成为最流行的对象关系影射(ORM)工具
2020-09-29 16:50:22
606

原创 原创 | 正确区分属性和字段
很多开发人员搞不清属性和字段的区别,本文试图对其作出澄清。在进行Java软件开发的时候,很多人都没有搞清Java对象中属性(Property)和字段(Field)的区别,以为属性就是字段。本文试图对这两个概念作一个澄清。范例首先上一个例子:平面直角坐标系中的矩形。一个矩形的形状可以用宽(width)和高(height)来表示,而它的位置可以用左下角坐标lowerLeftCoordinate(例如(10, 5))来表示。平面直角坐标系中任何一个点(Point)可以用这个点的坐标(x, y)来表示..
2020-09-29 16:46:53
1065

原创 原创视频 | 架构漫谈—如何创造复杂而有序的软件系统【含课件下载】
前述即使一片小小的树叶中都蕴含着惊人的复杂性同时……对树叶的深入研究会发现其中存在极其精妙的结构和机制爱因斯坦认为复杂的事物背后必然存在着简单的解释若非如此,宇宙和生命不可能稳定存在一切科学也都失去了根基物理学家发现复杂的宇宙之中的秩序生物学家发现复杂的生物体之中的秩序软件架构师定义复杂的软件的秩序架构师运用上帝创造世界的同样法则去创造复杂而有序的软件系统架构师直面软件的复杂性给复杂的软件系统引入秩序使其可以低成本地实现、维护、扩展和进化架构师设计架构Architect
2020-09-29 16:42:01
189

原创 原创 | 使用JPA实现DDD持久化-O/R阻抗失配(2/2)
4. 关联问题在领域模型中,关联表示了实体之间的关系。面向对象的语言如Java使用对象引用来表示关联,而在关系模型中,外键约束列表示了一个关联,它带有一些键值的副本。4.1 关联的方向性关联是有方向性的,通过对象引用的方式从一个实体(或值对象)指向另一个实体。它们都是指针。在Java代码中,体现为一个实体类拥有一个类型为另一个实体类(或其集合)的属性:public class Account { private Customer owner; ...}public class C..
2020-09-29 16:36:53
188
原创 原创 | 使用JPA实现DDD持久化-R:数据的世界
关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
2020-08-12 13:20:53
235
原创 原创 | 使用 JPA 实现 DDD 持久化 - O: 对象的世界 (3/3)
对象模型中有一部分与技术完全无关,纯粹用于描述问题域中的业务实体和业务逻辑的类,它们组成了**领域模型(domain model)**。领域模型主要由**实体(Entity,又称为引用对象)**和**值对象(Value Object)**组成。
2020-08-11 11:52:54
313
原创 原创 | 使用JPA实现DDD持久化- O:对象的世界(2/3)
对象是程序的基本构件块,但多数时候,要完成一项功能,单个对象往往力不从心,而需要多个对象之间的协作。对象和对象之间要结合在一起,形成更高层次的结构体,以实现比单个对象的单个方法更高粒度的功能。因此,相互协作的对象之间存在着各种各样的关系。
2020-08-06 11:20:29
176
原创 原创 | 使用 JPA 实现 DDD 持久化 - O: 对象的世界 (1/3)
目前,面向对象的编程范式统治了编程语言的世界。除了纯粹支持结构式编程的C、纯粹支持函数式编程的Haskell、Erlang、Lisp、Clojure等语言之外,绝大多数现代编程语言都是面向对象的。
2020-08-04 13:34:16
230
原创 原创 | TDD工具集:JUnit、AssertJ和Mockito (二十五)运行测试-在IDE中运行测试
在IntelliJ IDEA、Eclipse等现代Java开发IDE中如何直接运行测试。
2020-07-03 18:51:39
269
原创 原创 | TDD工具集:JUnit、AssertJ和Mockito (二十四)编写测试-内建扩展
JUnit中是如何通过配置同步实现并行测试的呢?
2020-07-02 12:34:36
188
原创 原创 | TDD工具集:JUnit、AssertJ和Mockito (二十三)编写测试-并行测试
分享下JUnit中是如何通过配置同步实现并行测试的!
2020-06-17 13:20:17
324
原创 原创 | TDD工具集:JUnit、AssertJ和Mockito (二十一)编写测试-动态测试
JUnit Jupiter提供了一种新的测试编程模型你知道吗?
2020-06-13 15:02:18
231
原创 原创 | TDD工具集:JUnit、AssertJ和Mockito (二十)编写测试-参数化测试
教你如何使用不同的参数值多次调用同一个测试方法。
2020-06-08 16:25:07
281
原创 TDD集:JUnit、AssertJ和Mockito (十九)编写测试-依赖注入\测试接口\重复测试
在编写测试中“依赖注入、测试接口、重复测试”的方法你 get√到了吗?
2020-06-06 15:12:21
350
原创 原创 | TDD工具集:JUnit、AssertJ和Mockito (十八)编写测试-测试执行顺序\嵌套的测试
编写测试执行顺序与嵌套的测试方法赶紧收藏起来啊!
2020-06-05 11:41:24
260
原创 原创 | TDD工具集:JUnit、AssertJ和Mockito (十六)编写测试-有条件执行测试
你知道JUnit Jupiter是如何通过扩展API允许开发者根据各种条件编程式地生效或失效某些测试的吗?
2020-06-03 13:35:21
253
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十五)编写测试-断言\假设\使测试失效
想知道编写测试中“断言、假设、使测试失效”的方法吗?
2020-06-02 16:45:32
304
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十四)编写测试-显示名
编写测试显示名可以通过@DisplayName注解给测试类和测试方法自定义名称。
2020-06-02 16:13:07
226
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十三)编写测试-生命周期方法
想知道编写测试中“断言、假设、使测试失效”的方法吗?
2020-06-01 16:35:49
378
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十二)编写测试-简单测试
在测试类中编写测试方法,一般将方法注解为 5 种,你知道哪 5 种吗?
2020-05-30 15:14:57
298
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十一)JUnit概述
JUnit 超级流行,是事实上的 Java 单元测试和 TDD 的工具标准。
2020-05-29 16:06:44
391
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十)在项目中准备测试环境
在准备开始测试之前,我们应该准备些什么呢?在这里可以找到答案!
2020-05-28 15:43:44
370
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (九)测试驱动开发(TDD)
测试驱动开发 = 测试先行 + 重构,你了解吗?
2020-05-27 13:50:43
374
原创 原创 | 使用 JUnit、AssertJ 和 Mockito 编写单元测试和实践 TDD (七)CORRECT 边界条件
我们用首字母缩略词 CORRECT 来帮助你列举需要测试的边界条件(字段或参数的取值)
2020-05-15 17:44:12
359
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (六)测试哪些内容:Right-BICEP
对一个工作单元有 6 个值得测试的部位,统称为:Right-BICEP。
2020-05-14 15:00:16
239
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (五)第一个单元测试
上一章讲到“关于单元测试的常见错误观念和做法”,这一章我们通过实例讲讲“第一个单元测试”到底应该怎么做。1. 需求我们要测试一个银行账户类Account的“取款”工作单元——withdraw()方法。我们先定义这个方法的契约:如果账户被冻结,取款将失败,并抛出AccountLockedException异常如果取款金额是0或者负数,取款将失败,并抛出InvalidAmountException异常。如果余额不足,取款将失败,并抛出BalanceInsufficientException异常。..
2020-05-13 18:33:38
348
原创 原创 | 使用 JUnit、AssertJ 和 Mockito 编写单元测试和实践 TDD (四)关于单元测试的常见错误观念和做法
上一章讲到“单元测试在整个测试体系中的位置”,这一章我们讲讲“关于单元测试的常见错误观念和做法”。很多人对单元测试存在错误的观念和错误的做法。典型的错误观念和做法如下:1. 错误观念测试是测试人员的工作。程序员只应该写产品代码测试人员只在乎整个系统在功能和外部质量方面是否满足客户和用户的需求,他们既不了解、也不在乎你写的代码和你的程序结构,因此他们只能编写黑盒测试而无法编写白盒测试。写代码和定义内部结构是程序员的工作,通过单元测试证明你的代码和结构的正确性和可靠性同样是程序员的工作。编..
2020-05-13 18:27:47
495
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (三)单元测试在整个测试体系中的位置
上一章讲到“为什么要写单元测试?”,这一章我们讲讲“单元测试在整个测试体系中的位置”单元测试是软件测试体系中的一员。1. 软件测试的类别软件测试主要有以下这些类别:单元测试。对底层代码的每个工作单元进行测试。通常涉及一个类的一个公开方法。白盒测试。细粒度。集成测试。中等粒度的测试。对多个类之间的协作或与外部系统的交互以完成某项内部功能进行测试。涉及多个类的交互。白盒测试。中等粒度。功能测试。粗粒度的测试。针对系统的每个用例(对客户或用户有用的功能)进行测试。黑盒测试。粗粒度。性能和负载测试..
2020-05-09 15:52:00
284
原创 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (二)为什么要写单元测试
上一章讲到“什么是单元测试”,这一章我们讲讲“为什么要写单元测试?”听到这个问题,我的直接回答就是:“为什么不写单元测试?”不过为了说服那些怀疑论者,我还是罗列一下单元测试的好处。从生理到心理,从做事到做人。:)保证代码正确性这个不用多说,保证代码正确性是单元测试的题中之义。保证代码在边缘状态和异常条件下的正确性全面的单元测试覆盖不仅保证了代码在一切正常的情况下的正确性,还会保...
2020-05-08 16:13:38
289
原创 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (一)什么是单元测试
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.(如果建筑业者用程序员写程序的方式盖楼造桥,那么第一只飞来驻足的啄木鸟就足以毁灭人类文明) ...
2020-05-07 15:54:55
396
原创 原创 | 类应该是匀称和均匀的
当我们采用面向对象的编程语言来设计类的时候,我们设计的大部分类应该是匀称并且均匀的。类本身应该是匀称的我们知道,类既有状态,又有行为。在多数面向对象的语言中,状态由类的字段来承载,而行为通过类的方法来实现。通过方法调用可以改变类的内部状态,而类的内部状态又可以影响方法的调用结果。类应该是匀称的,在一个类的内部,它的字段数量和方法数量之间应该维持一个合适的比例。只有字段没有方法的类和只有方法...
2020-05-07 15:43:18
259
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人