paicoding
基础篇
讲解该项目的基础部分
MVC 和三层架构的区别
MVC 流程
- 用户通过 View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等。
- 服务端的 Controller 控制器接收到请求后对请求进行解析,找到相应的 Model,对用户请求进行处理。
- 处理结果再交给 Controller(控制器其实只是起到了承上启下的作用)。
- 根据处理结果找到要作为向客户端发回的响应 View 页面,页面渲染后发送给客户端。
全局架构
├── paicoding-api |
数据存储对象
这些术语通常在软件开发中用于描述不同层次的对象和数据传输。以下是它们的含义:
DO (Domain Object):领域对象,用于表示业务领域中的实体或概念。它们通常与数据库中的表或实体对应,包含业务逻辑和数据操作。
DTO (Data Transfer Object):数据传输对象,用于在不同层之间传输数据。它们通常是轻量级的对象,仅包含需要传输的数据,而不包含业务逻辑。
BO (Business Object):业务对象,用于表示业务逻辑的实体或概念。它们封装了业务逻辑,并与领域对象交互来实现具体的业务功能。
PO (Persistence Object):持久化对象,用于表示与数据库交互的实体或数据。它们通常与数据库中的表或实体对应,并提供数据持久化的功能。
VO (View Object):视图对象,用于表示用户界面中的数据。它们通常用于在前端界面显示数据,与用户交互。
Req (Request Parameter Object):请求参数对象,用于封装 HTTP 请求中的参数数据。它们通常用于在服务端接收和处理 HTTP 请求。
Rsp (Response Object):返回结果对象,用于封装服务端处理结果并返回给客户端的数据。它们通常包含操作结果和相关的状态信息。
差异性
vo与dto
在大多数情况下,DTO(数据传输对象)和VO(视图对象)的属性基本相同,都是简单的POJO。但是从概念上来说,它们有着本质的区别。DTO代表服务层需要接收和返回的数据,而VO代表展示层需要显示的数据。通常来说:
- 展示层向服务层传递数据时使用DTO。
- 服务层向展示层返回数据时使用VO。
dto与do
DTO和DO(领域对象)在设计上有区别,但在实现上通常不会有明显的区别。DTO用于服务层接收和返回数据,而DO代表领域层的实体对象。尽管它们的属性可能相同,但DTO主要用于展示层和服务层之间的数据传递,而DO主要用于领域逻辑和数据持久化。
do与po
DO和PO(持久化对象)在大多数情况下是一一对应的,代表着数据库中的持久化对象。它们之间的区别通常不大,但有时PO可能包含一些与业务无关的持久化属性,而DO则更关注领域逻辑。
po与entity
PO和实体(Entity)通常是对应的,表示数据库中的持久化对象。它们之间的区别在于项目规范的不同,有些项目中使用PO表示持久化对象,而有些项目使用Entity表示。
dto与bo
DTO主要用于数据传输,而BO(业务对象)通常用于保存业务相关的数据。在调用外部服务接口时,通常会将外部服务返回的DTO转换为内部的BO对象进行使用。这样做的好处在于,可以更好地控制内部业务逻辑,同时降低对外部服务变化的敏感度。
AOP
让我们来了解一下 AOP(面向切面编程)涉及到的 5 个关键术语:
1)横切关注点:指从每个方法中抽取出来的同一类非核心业务。
2)切面(Aspect):是对横切关注点进行封装的类,每个关注点体现为一个通知方法。通常使用 @Aspect
注解来定义切面。
3)通知(Advice):切面必须要完成的具体工作,比如记录接口调用前后的时长。通知的方式有五种:
@Before
:在目标方法调用之前执行通知方法。@After
:在目标方法调用后执行通知方法。@AfterReturning
:在目标方法返回后执行通知方法。@AfterThrowing
:在目标方法抛出异常后执行通知方法。@Around
:包裹目标方法,在调用前后执行通知方法。
4)连接点(JoinPoint):通知应用的时机,比如接口方法被调用时就是日志切面的连接点。
5)切点(Pointcut):通知功能被应用的范围,比如日志切面的应用范围是所有 controller 的接口。通常使用 @Pointcut
注解来定义切点表达式。