Skip to content
本页目录

数据模型的定义

数据模型是对数据结构的定义,可以有效地约束和规范前端页面、后端服务以及前后端交互等逻辑中的数据。可以有效地约束和规范前端页面、后端服务以及前后端交互等逻辑中的数据对象。

目的和优势

数据模型的主要目的是确保前端页面、后端服务以及前后端交互中的数据对象具有一致性、规范性和可靠性。它提供了一种定义数据模型的标准方式,使得前后端可以更好地协同工作,提高开发效率和降低维护成本。它具有以下优势:

  • 易于理解和使用:开发者只需遵循相同的方式,定义、查阅和使用数据结构。
  • 灵活性高:支持自定义数据类型和结构,开发者可以根据业务需求自由扩展和定制数据模型。
  • 前后端通用:适用于前端页面、后端服务以及前后端交互等多种场景,实现了真正的前后端通用。
  • 便于维护:一旦定义好数据模型,后续开发过程中只需遵循即可,大大减少了维护成本。

定义和结构

数据模型使用JSON格式定义数据模型,分为多属性模式单属性模式

多属性模式

多属性模式,每个数据模型都由若干个数据对象组成,每个数据对象包含若干个属性。属性又包含名称、类型、是否必填、默认值、校验方式、格式等信息。以下是一个简单的数据模型定义示例:

json
[
  {
    "name": "name",
    "type": "String",
    "required": true,
    "default": "John Doe"  
  },
  {
    "name": "email",
    "type": "String",
    "required": true,
    "pattern": "/^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/",
    "validationMessage": "错误的 Email 地址"
  },
  {
    "name": "age",
    "type": "Integer",
    "required": false,
    "default": 0
  }
]

在上述示例中,我们定义了一个数据模型,其中包含"name"、"age"和"email"三个属性。每个属性都有各自的名称、类型、是否必填等信息。其中,"email"属性还定义了一个正则表达式模式,用于校验输入的电子邮件地址是否合法。

单属性模式

当数据模型只有一个属性的时候,也可以直接使用单属性模式,此时定义格式如属性定义格式,只是没有 name 属性,示例如下:

json
{
  "type": "String",
  "required": true,
  "default": "John Doe"  
}

属性类型

属性类型包括基础数据类型、对象类型和引用类型,具体定义和使用如下:

基础数据类型

基础数据类型分为 String 字符串 Integer 整数 Number 数字 Boolean 布尔类型 Date 日期 List 列表 Map Key-value结构 等

String 字符串

json
{
  "name": "name", // 属性名
  "type": "String", // 类型
  "required": true, // 是否必填
  "pattern": "/^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/", // 校验正则表达式
  "max": 200, // 最大长度
  "min": 0, // 最小长度
  "validator": "",  // 校验器名称,如email、phone等
  "default": "" // 默认值
}

Integer 整数

json
{
  "name": "name", // 属性名
  "type": "Integer",  // 类型
  "required": true, // 是否必填
  "min": 0, // 最小值
  "max": 200, // 最大值
  "validator": "",  // 校验器名称,如email、phone等
  "default": 0 // 默认值
}

Number 数字类型

json
{
  "name": "name", // 属性名
  "type": "Number", // 类型
  "required": true, // 是否必填
  "min": 0, // 最小值
  "max": 2000, // 最大值
  "precision": 10, // 精度
  "scale": 2, // 小数位数
  "validator": "",  // 校验器名称,如email、phone等
  "default": 0 // 默认值
}

Boolean 布尔类型

json
{
  "name": "disabled", // 属性名
  "type": "Boolean", // 类型
  "required": true, // 是否必填
  "validationMessage": "",   // 校验错误后的提示信息
  "default": false // 默认值
}

Date 日期

json
{
  "name": "name", // 属性名
  "type": "Date", // 类型
  "required": true, // 是否必填
  "pattern": "yyyy-MM-dd HH:mm:ss", // 日期格式
  "validator": "",  // 校验器名称
  "default": "" // 默认值
}

List 列表

json
{
  "name": "name", // 属性名
  "type": "List", // 类型
  "required": true, // 是否必填
  "itemType": "String" // 元素类型
}

其中 itemType 可以是 String Integer Number Boolean Date 以及 对象类型 或 引用的其他数据模型的名称

Map Key-Value结构

json
{
  "name": "name", // 属性名
  "type": "Map", // 类型
  "required": true, // 是否必填
  "itemType": "String" // 元素类型
}

其中 itemType 可以是 String Integer Number Boolean Date 以及 对象类型 或 引用的其他数据模型的名称

对象(复合)类型

对象类型是基础类型的组合,相当于Java中的Object对象,定义如下:

json
[
  {
    "name": "name",
    "type": "String",
    "required": true,
    "default": "John Doe"  
  },
  {
    "name": "email",
    "type": "String",
    "required": true,
    "pattern": "/^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/"
  },
  {
    "name": "age",
    "type": "Integer",
    "required": false,
    "default": 0
  }
]

要定义一个内嵌对象类型的属性如下:

json
{
  "name": "name", // 属性名
  "required": true, // 是否必填  
  "type": [
    {
      "name": "name",
      "type": "String",
      "required": true,
      "default": "John Doe"  
    },
    {
      "name": "email",
      "type": "String",
      "required": true,
      "pattern": "/^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/"
    },
    {
      "name": "age",
      "type": "Integer",
      "required": false,
      "default": 0
    }
  ]
}

此时,type 属性 是可以内嵌定义的数据对象

模型引用

如果需要引用已经定义的数据模型作为属性类型,可以直接将属性的 type 属性,设置为模型名称,其使用方法如下:

json
[
  // 属性dept为自定义类型的Department
  {
    "name": "dept",
    "type": "Department",
    "required": true
  },
  // 属性tags为自定义类型的Tag
  {
    "name": "tags",
    "type": "Set",
    "itemType": "Tag",
    "required": true
  },
  // 属性actions为自定义类型的Action
  {
    "name": "actions",
    "type": "Map",
    "itemType": "Action",
    "required": true
  }
]

其中,Department Tag Action 为创建的数据模型,形成模型和模型之间的引用

综合举例

json
[ // 对象模型
  {
    "name": "id",
    "type": "Integer",  // 整型
    "required": true,
    "min": 0
  }, {
    "name": "name",
    "type": "String",   // 字符串
    "required": true,
    "max": 10,
    "pattern": "\\w+"
  }, {
    "name": "model",
    "type": [   // 内嵌对象模型
      {
        "name": "name",
        "type": "String", // 字符串
        "required": true,
        "max": 10,
        "pattern": "\\w+"
      }, {
        "name": "size",
        "type": "Integer",  // 整型
        "required": true
      }
    ],
    "required": true
  }, {
    "name": "published",
    "type": "Boolean",  // 布尔类型
    "required": true
  }, {
    "name": "tags",
    "type": "List",     // 列表
    "itemType": "String",
    "required": true
  }, {
    "name": "items",
    "type": "List",     // 列表
    "itemType": "Item", // 自定义模型Item  
    "required": true
  }, {
    "name": "models",
    "type": "Map",  // Key-Value结构,类似Object类型
    "itemType": "Model",  // 自定义模型 Model
    "required": true
  }, {
    "name": "subModels",
    "type": "Map",  // Key-Value结构,类似Object类型
    "itemType": [   // 内嵌对象模型
      {
        "name": "name",
        "type": "String", // 字符串
        "required": true,
        "max": 10,
        "pattern": "\\w+"
      }, {
        "name": "published",
        "type": "Boolean",  // 布尔类型
        "required": true
      }
    ],
    "required": true
  }
]

图形化编辑器

为了方便开发者创建和编辑JSON数据模型,我们可以使用图形化编辑器。图形化编辑器将提供直观的界面和操作方式,使得开发者可以轻松地完成数据模型的创建和编辑。编辑器应该支持以下功能:

  • 创建和删除数据对象和属性。
  • 编辑数据对象的属性和结构。
  • 查看数据模型的定义和示例。
  • 模型、属性的复制和引用。
  • 保存和导出数据模型。

根据模型快速配置

null

模拟数据

根据定义,可生成符合规则要求的模拟数据。

工具类

为了方便开发者解析和校验JSON数据模型,使用Java语言编写工具类 ModelUtil 。工具类提供以下功能:

  • 根据模型名称,解析JSON字符串,转换为Java数据对象。
  • 根据模型名称,校验数据对象的合法性。
  • 根据模型名称,将数据对象序列化为JSON。

根据模型名称解析JSON字符串为Java数据对象

java
public static <T> T toObj(String jsonStr, String modelName)

根据模型名称校验Java数据对象

java
public static void validate(Object obj, String modelName)

当校验不通过时,会抛出RuntimeException异常。

根据模型名称将Java数据对象序列化成JSON字符串

java
public static String toJson(Object obj, String modelName)

根据模型名称生成包含模拟数据的JSON字符串

java
public static String mock(String modelName)

内部资料,请勿外传