目录

一、SDD(规范驱动开发)核心定义

二、慢病管理系统业务边界与核心规范

三、SDD 核心规范文件定义(工程核心)

四、基于 SDD 的系统架构设计(工程落地)

五、SDD 落地:自动生成工程代码

六、核心业务模块工程实现(基于 SDD 规范)

七、SDD 配套:测试规范(自动生成测试用例)

八、数据库设计规范(严格匹配数据模型)

九、工程部署与合规规范

总结


一、SDD(规范驱动开发)核心定义

规范驱动开发(Spec-Driven Development, SDD) 是先定义严格、可执行、可验证的系统规范,再基于规范编码、测试、部署的开发模式,核心是规范先行、契约优先、全流程可校验,彻底解决需求模糊、接口混乱、前后端 / 服务间协作故障问题。

对比传统开发:

  • 传统:需求文档 → 编码 → 测试(文档与代码脱节)
  • SDD:可执行规范 → 自动生成接口 / 测试骨架 → 编码实现 → 自动校验合规性

本设计严格遵循 SDD,输出可直接落地工程代码的完整规范,覆盖慢病管理全业务场景。

二、慢病管理系统业务边界与核心规范

1. 系统定位(顶层规范)

目标:为高血压 / 糖尿病 / 冠心病等慢性病人群提供全周期健康管理,覆盖患者、医生、护士、管理员四类角色,支持健康数据采集、风险评估、随访管理、用药提醒、诊疗协同。
核心约束

  1. 医疗数据合规:遵循 HIPAA / 国内健康数据安全规范,数据加密存储、操作留痕
  1. 实时性:健康数据上报延迟≤1s,风险评估响应≤2s
  1. 可用性:7×24 小时服务,年度可用性≥99.9%
  1. 扩展性:支持新增慢病类型、新增检测指标无侵入改造

2. 核心业务域划分(模块化规范)

将系统拆分为 6 个独立子域,每个子域独立定义规范,解耦开发:

  1. 用户认证与权限域:身份验证、角色权限、患者档案管理
  1. 健康数据采集域:血压、血糖、心率、用药等数据上报
  1. 慢病风险评估域:基于临床指南的自动风险分级
  1. 随访与干预域:医生随访计划、智能提醒、健康指导
  1. 用药管理域:处方管理、用药记录、漏服提醒
  1. 统计分析域:健康趋势报表、医生工作台、监管报表

三、SDD 核心规范文件定义(工程核心)

SDD 的核心是标准化、可解析的规范文件,本系统采用OpenAPI 3.0(接口规范)+ JSON Schema(数据模型规范)+ 业务规则规范三位一体定义。

规范 1:数据模型规范(JSON Schema)- 患者核心实体

所有编码必须严格遵循此数据结构,是前后端、数据库的唯一标准

json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "慢病患者核心模型",
  "type": "object",
  "required": ["patientId", "basicInfo", "chronicDiseaseInfo", "createTime"],
  "properties": {
    "patientId": {
      "type": "string",
      "format": "uuid",
      "description": "患者唯一标识,全局唯一"
    },
    "basicInfo": {
      "type": "object",
      "required": ["name", "idCard", "phone", "gender", "age"],
      "properties": {
        "name": { "type": "string", "minLength": 2, "maxLength": 20 },
        "idCard": { "type": "string", "pattern": "^\\d{17}[\\dXx]$" },
        "phone": { "type": "string", "pattern": "^1[3-9]\\d{9}$" },
        "gender": { "type": "string", "enum": ["MALE", "FEMALE", "OTHER"] },
        "age": { "type": "integer", "minimum": 18, "maximum": 120 }
      }
    },
    "chronicDiseaseInfo": {
      "type": "array",
      "description": "患者绑定的慢病类型",
      "items": {
        "type": "object",
        "required": ["diseaseCode", "diseaseName", "diagnosisTime"],
        "properties": {
          "diseaseCode": { "type": "string", "enum": ["HYP", "DIA", "COR"] }, // 高血压/糖尿病/冠心病
          "diseaseName": { "type": "string" },
          "diagnosisTime": { "type": "string", "format": "date-time" }
        }
      }
    },
    "status": {
      "type": "string",
      "enum": ["NORMAL", "RISK", "CRITICAL", "FOLLOW_UP"],
      "default": "NORMAL",
      "description": "患者健康状态"
    },
    "createTime": { "type": "string", "format": "date-time" },
    "updateTime": { "type": "string", "format": "date-time" }
  }
}

规范 2:接口规范(OpenAPI 3.0)- 健康数据上报接口

工程价值:可直接生成后端控制器、前端 API 调用代码、测试用例

yaml
openapi: 3.0.3
info:
  title: 慢病管理系统 - 健康数据接口规范
  version: 1.0.0
  description: 严格遵循SDD,所有服务必须实现此接口
servers:
  - url: http://api.chronic-disease.com/v1
paths:
  /health-data/report:
    post:
      summary: 患者健康数据上报
      description: 血压/血糖/心率等核心健康数据上报,自动触发风险评估
      operationId: reportHealthData
      security:
        - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: ["patientId", "dataType", "measureValue", "measureTime"]
              properties:
                patientId: { type: "string", format: "uuid" }
                dataType:
                  type: "string"
                  enum: ["BLOOD_PRESSURE", "BLOOD_SUGAR", "HEART_RATE"]
                measureValue:
                  type: "object"
                  description: "根据dataType动态定义,严格匹配临床单位"
                measureTime: { type: "string", format: "date-time" }
      responses:
        '200':
          description: 上报成功,返回风险评估结果
          content:
            application/json:
              schema:
                type: object
                properties:
                  code: { type: "integer", example: 200 }
                  message: { type: "string", example: "上报成功" }
                  data:
                    type: object
                    properties:
                      riskLevel: { type: "string", enum: ["LOW", "MEDIUM", "HIGH", "CRITICAL"] }
                      advice: { type: "string" }
        '400': { description: "参数错误" }
        '401': { description: "未授权" }
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

规范 3:业务规则规范(可执行规则)

SDD 要求业务规则可编码、可校验,而非文字描述:

  1. 高血压风险评估规则
  • 收缩压≥180 且 舒张压≥110 → 极高危(CRITICAL)
  • 收缩压 160-179 且 舒张压 100-109 → 高危(HIGH)
  • 连续 3 天数据异常 → 自动触发医生随访
  1. 用药提醒规则
  • 患者设定用药时间后,提前 5 分钟 APP 推送提醒
  • 2 小时内未确认用药 → 标记漏服,通知责任护士
  1. 数据权限规则
  • 医生仅可查看自己绑定的患者数据
  • 管理员可查看全量数据,无修改权限
  • 患者仅可查看 / 修改自己的健康数据

四、基于 SDD 的系统架构设计(工程落地)

1. 技术栈规范(强制统一,避免技术债务)

  • 后端:SpringBoot 3.x + SpringSecurity(权限)+ MyBatis-Plus(ORM)
  • 接口规范:OpenAPI 3.0 + SpringDoc(自动生成文档)
  • 数据校验:JSON Schema Validator(严格校验入参)
  • 数据库:MySQL 8.0(业务数据)+ Redis(缓存 / 提醒)
  • 消息队列:RabbitMQ(异步处理风险评估、提醒)
  • 部署:Docker + Kubernetes(容器化,符合规范一致性)

2. 分层架构规范(严格遵循 SDD,代码必须按层实现)

Plain Text
├── 接口层(Controller):严格实现OpenAPI规范,无业务逻辑
├── 业务层(Service):实现业务规则规范,核心逻辑
├── 数据层(Repository):遵循数据模型规范,操作数据库
├── 公共层(Common):规范工具类(数据校验、异常、工具)
└── 启动层(Application):项目入口,配置加载

3. 编码规范(SDD 强制约束)

  1. 所有入参 / 出参必须通过JSON Schema 校验,不允许手动校验
  1. 所有接口必须与 OpenAPI 规范完全一致,不允许私自新增 / 修改字段
  1. 业务逻辑必须严格匹配业务规则规范,不允许硬编码随意修改规则
  1. 异常处理统一规范:错误码、错误信息全局标准化

五、SDD 落地:自动生成工程代码

这是 SDD 核心优势:基于规范自动生成代码,减少 80% 重复工作

1. 工具链

  • OpenAPI Generator:自动生成 Controller、DTO、Feign 接口
  • JSON Schema2Pojo:自动生成 Java 数据模型类
  • 自定义代码生成器:基于业务规则生成 Service 逻辑骨架

2. 自动生成代码示例(数据模型)

基于上述 JSON Schema 自动生成的ChronicPatient.java(可直接使用):

java
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.*;
import java.time.LocalDateTime;
import java.util.List;

@Data
@Schema(description = "慢病患者核心模型 - 严格遵循SDD数据规范")
public class ChronicPatient {
    @NotBlank
    @Schema(description = "患者唯一标识", format = "uuid")
    private String patientId;

    @NotNull
    private BasicInfo basicInfo;

    @NotEmpty
    private List<ChronicDiseaseInfo> chronicDiseaseInfo;

    @Schema(description = "患者健康状态", defaultValue = "NORMAL")
    private PatientStatus status;

    @NotNull
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

    // 内部类:基础信息(自动匹配Schema)
    @Data
    public static class BasicInfo {
        @Size(min = 2, max = 20)
        private String name;
        @Pattern(regexp = "^\\d{17}[\\dXx]$")
        private String idCard;
        @Pattern(regexp = "^1[3-9]\\d{9}$")
        private String phone;
        private Gender gender;
        @Min(18) @Max(120)
        private Integer age;
    }

    // 枚举:严格遵循规范定义
    public enum Gender { MALE, FEMALE, OTHER }
    public enum PatientStatus { NORMAL, RISK, CRITICAL, FOLLOW_UP }
}

3. 自动生成 Controller 代码

java
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;

@RestController
@RequestMapping("/v1/health-data")
@Tag(name = "健康数据接口", description = "严格遵循OpenAPI 3.0规范")
public class HealthDataController {
    // 自动生成接口,仅需实现业务逻辑
    @PostMapping("/report")
    public HealthDataResponse reportHealthData(@Valid @RequestBody HealthDataRequest request) {
        // 业务实现:调用Service,遵循业务规则规范
        return healthDataService.report(request);
    }
}

六、核心业务模块工程实现(基于 SDD 规范)

模块 1:健康数据上报与风险评估(核心流程)

1. 流程规范(SDD 定义)

  1. 患者 APP 上报数据 → 接口层校验(Schema 规范)
  1. 数据落库 → 异步发送消息到 MQ
  1. 消费 MQ → 执行风险评估规则(业务规范)
  1. 返回评估结果 → 推送提醒给患者 / 医生

2. 核心业务代码(合规实现)

java
@Service
public class HealthDataServiceImpl implements HealthDataService {
    private final SchemaValidator schemaValidator;
    private final RabbitTemplate rabbitTemplate;
    private final HealthDataRepository repository;

    // 1. 数据上报:严格遵循规范校验
    @Override
    public HealthDataResponse reportHealthData(HealthDataRequest request) {
        // 步骤1:JSON Schema强校验(SDD强制要求)
        schemaValidator.validate(request);
        // 步骤2:转换为规范数据模型并保存
        HealthDataEntity entity = convertToEntity(request);
        repository.insert(entity);
        // 步骤3:异步触发风险评估(解耦,符合规范)
        rabbitTemplate.convertAndSend("health.data.queue", entity);
        // 步骤4:返回标准响应格式
        return buildSuccessResponse();
    }

    // 2. 风险评估:严格实现业务规则规范
    @RabbitListener(queues = "health.data.queue")
    public void riskAssessment(HealthDataEntity entity) {
        if ("BLOOD_PRESSURE".equals(entity.getDataType())) {
            BloodPressureValue value = (BloodPressureValue) entity.getMeasureValue();
            // 严格按照高血压临床指南规则判断
            if (value.getSystolic() >= 180 && value.getDiastolic() >= 110) {
                updatePatientRisk(entity.getPatientId(), "CRITICAL");
                // 触发随访提醒
                followUpService.createFollowUpTask(entity.getPatientId(), "血压极高危,立即干预");
            }
        }
    }
}

模块 2:随访管理模块

严格遵循 SDD 规范:接口标准化、数据标准化、业务规则标准化

  • 支持医生创建随访计划
  • 自动提醒患者 / 医生
  • 随访记录可追溯、符合医疗合规

七、SDD 配套:测试规范(自动生成测试用例)

SDD 模式下,测试用例由规范自动生成,无需手动编写:

  1. 接口测试:基于 OpenAPI 生成 Postman 脚本、JUnit 接口测试
  1. 数据测试:基于 JSON Schema 生成参数合法性测试(空值、格式、枚举)
  1. 业务测试:基于业务规则生成场景化测试(高危数据、漏服提醒)

示例自动生成的单元测试:

java
@Test
void testReportHealthData_InvalidPhone() {
    // 测试不合法手机号(违反Schema规范)
    HealthDataRequest request = new HealthDataRequest();
    request.setPatientId("invalid-id");
    // 预期:抛出Schema校验异常,符合SDD规范
    assertThrows(SchemaValidationException.class, () -> service.reportHealthData(request));
}

八、数据库设计规范(严格匹配数据模型)

SDD 要求数据库表结构 = 数据模型规范,无冗余、无歧义
核心表:

  1. chronic_patient(患者表):完全匹配 JSON Schema 字段
  1. health_data(健康数据表):存储上报的血压 / 血糖数据
  1. follow_up_record(随访记录表):存储医生随访记录
  1. medication_record(用药记录表):存储用药 / 漏服数据

九、工程部署与合规规范

  1. 容器化部署:Docker 镜像打包,保证环境与规范一致
  1. 数据加密:健康数据、身份证号 AES 加密存储,符合医疗合规
  1. 操作日志:所有数据修改自动记录日志,满足审计规范
  1. 监控告警:服务异常、数据异常实时告警,符合可用性规范

总结

这是一套可直接落地工程开发的 SDD 慢病管理系统完整方案,核心价值:

  1. 规范先行:所有代码、接口、数据、业务都有严格可执行的标准
  1. 自动生成:80% 基础代码(模型、Controller、接口、测试)自动生成,高效稳定
  1. 工程化:分层清晰、技术栈统一、符合医疗行业合规要求
  1. 可扩展:新增慢病、新增指标无需重构核心代码,仅需扩展规范
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐