0017. 字段校验的分层设计
1. 📒 概述
- 字段校验的职责划分是一个常见的设计问题。根据分层架构的最佳实践,字段校验可以分为 简单校验 和 非简单校验 两部分:
- 简单校验(如字段是否为空、类型是否正确):
- 放在 Controller 层。
- 目的是 确保请求参数符合接口的基本要求。
- 非简单校验(业务逻辑校验)(如字段值是否合法、关联数据是否存在):
- 放在 Service 层。
- 目的是 确保数据的一致性和完整性,符合业务规则。
- “非简单校验”也可以称为“业务逻辑校验”,这部分的逻辑往往属于业务层范畴,通常会跟你的数据库相关联。
类型 | 判断标准 | 位置 | 描述 |
---|---|---|---|
简单校验 | 数据库无关 | Controller 层 | 与数据库无关,仅对请求参数的基本格式、类型和完整性进行验证。 |
非简单校验 | 数据库相关 | Service 层 | 与数据库或业务规则相关,需要查询数据库或其他外部资源来验证数据的合法性和一致性。 |
2. 📒 简单校验
- 定义:与数据库无关,仅对请求参数的基本格式、类型和完整性进行验证。
- 特点:
- 不涉及数据库查询或其他外部资源。
- 通常用于检查字段是否为空、类型是否正确、长度是否符合要求等。
- 目的是确保请求参数符合接口的基本约束。
- 归属:这类校验通常属于 请求参数校验,应该放在 Controller 层。
- 原因:
- Controller 层负责处理 HTTP 请求和响应,确保请求参数符合接口的要求。
- 如果请求参数不符合基本要求(如必填字段缺失或类型错误),应直接在 Controller 层拒绝请求,避免进入服务层。
- 示例:
- 比如用户在使用手机号登录的时候,验证手机号是否为空,手机号格式是否正确,等等,这些逻辑跟数据库是无关的,属于简单校验。
3. 📒 业务逻辑校验
- 定义:与数据库或业务规则相关,需要查询数据库或其他外部资源来验证数据的合法性和一致性。
- 特点:
- 涉及数据库操作(如检查某条记录是否存在)。
- 可能依赖其他表的数据或复杂的业务规则。
- 目的是确保数据符合业务逻辑的要求。
- 归属:这类校验属于 业务逻辑,应该放在 Service 层。
- 原因:
- Service 层专注于实现核心业务逻辑,确保数据的一致性和完整性。
- 如果校验失败,通常需要返回更具体的业务错误信息,而不是简单的参数错误。
- 示例:
- 比如有一个新增学生的接口,需要往数据库中添加一条学生记录,并且要求在添加学生的时候,必须要明确该学生所属的班级,这种情况下,往往会在创建学生的时候带上所属班级的 ID,如果这个 ID 不存在,则无法创建学生,此时就需要对班级 ID 进行校验,看看这个 ID 是否存在,这就属于业务逻辑校验。