arrow_back

设计

print
  1. 设计

    应用设计是数据库设计师、模块设计师和功能设计师共同使用的一个页面。Pittypat 根据项目经理安排的工作任务来确定当前设计师用户的职能,并显示相应的模块和打开匹配的上下文菜单。无论当前用户是否具有设计数据库的职责,都会显示数据库的设计内容,因为这些内容在进行功能模块设计时会引用到。

    在传统的 ORM (对象关系映射)中,基本上是直接将数据库表映射为一个实体类,并为数据实体类提供基本的 CRUD(Create-创建、Retrieve-查询、Update-更新、Delete-删除) 操作。更复杂的业务操作需要开发人员在 CRUD 的基础上进行二次封装。

    Pittypat 采用不同的方式,允许开发者直接设计目标业务功能和业务对象,而不是简单将数据库表映射为实体类。通过这种方式设计的功能模块不再需要进行二次封装,由此可以大幅度减少人工编写应用服务代码(C# 或 Java)的工作量,降低这部分代码出错的概率。

    1. 定义

      1. 标识符

        在 Pittypat 中,标识符需要满足如下的条件:

        • 除了索引的标识符最长可以是 63 个字符外,其他标识符的最大长度不能超过 30。

        • 第一个字符必须是字母,首字符是下划线的标识符被 Pittypat 保留使用。

        • 其他字符可以是字母、数字或下划线。

        • 在设计时,标识符的比较不区分大小写。

        不同类别的标识符有不同的要求:

        • 开发者代码

          必须是有效标识符,长度大于等于 3,不能是 C#、Java 和 JS 中关键字,不能是 C# 和 Java 中基础成员名称,不能是 Pittypat 保留关键字,不能已经被注册。

          开发者代码将作为请求路径、数据库架构名称、命名空间路径、包路径的一部分。

        • 应用标识符

          必须是有效标识符,不能是 C#、Java 和 JS 中关键字,不能是 Pittypat 保留关键字。

          应用标识符将作为请求路径、数据库架构名称、命名空间路径、包路径的一部分。

        • 模块标识符

          必须是有效标识符,不能是 C#、Java 和 JS 中关键字,不能是 Pittypat 保留关键字。

          模块标识符将作为请求路径、命名空间路径、包路径、视图名称、存储过程名称的一部分。

        • 功能标识符

          必须是有效标识符,不能是 C#、Java 和 JS 中关键字,不能是 Pittypat 保留关键字。

          功能标识符将作为请求路径、存储过程名称、API 方法名称的一部分,也是功能实体类名称。

        • 参数标识符

          必须是有效标识符,不能是 C#、Java 和 JS 中关键字,不能是 C# 和 Java 中基础成员名称,不能是 Pittypat 保留关键字。

          参数标识符将作为功能实体类属性或字段名称、存储过程参数名称。

        • 对象标识符

          必须是有效标识符,不能是 C# 和 Java 中基础成员名称,不能是 Pittypat 保留关键字。

          对象标识符将作为视图名称的一部分,也是对象实体类名称。

        • 属性标识符

          必须是有效标识符,不能是 C# 和 Java 中基础成员名称,不能是 Pittypat 保留关键字。

          属性标识符将作为对象实体类属性或字段名称、视图列名称。

        • 表标识符

          必须是有效标识符。

        • 列标识符

          必须是有效标识符,不能是 C# 和 Java 中基础成员名称,不能是 Pittypat 保留关键字。

        • 索引标识符

          必须是有效标识符。

        • 数据库架构标识符

          必须是目标数据库要求的有效标识符。默认的 Pittypat 为每一个应用创建一个数据库架构,架构标识符为:{开发者代码}_{应用标识符}

        • 视图标识符

          必须是目标数据库要求的有效标识符。默认的 Pittypat 为每一个对象创建一个数据库视图,视图标识符为:v_{模块标识符}_{对象标识符}

        • 存储过程标识符

          必须是目标数据库要求的有效标识符。默认的 Pittypat 为每一个功能创建一个存储过程,存储过程标识符为:p_{模块标识符}_{功能标识符}

      2. 标识符大小写

        不同语言通常有自己的标识符大小写约定,由于同一个标识符可能会被映射到不同的语言(JavaScript、Java、C#、SQL 等)。Pittypat 会根据目标语言的默认约定,自动转换 Pascal 或 camel 大小写格式。

        为了统一,我们建议:

        • 功能、对象和表的标识符使用 Pascal 大小写格式。

        • 参数标识符使用 camel 大小写格式。

        • 其他标识符使用 Pascal 或 camel 大小写格式。

      3. 构成要素

        Pittypat 中软件的构成要素包括:

        • 应用

          表示一个独立的应用程序,可以单独创建、升级、部署和卸载。

          一个完整的系统可以包含多个应用。

          一个开发者可以开发多个应用。对于开发者可以创建的应用的数目没有限制。

        • 模块

          模块是一组高内聚的功能的集合,是进行权限分配的单位。

          一个应用由多个模块构成。

          单个应用中最多可以创建 1024 个模块。在默认的导航列表中,树状导航分为两级,第一级为应用,第二级为模块。如果模块数量比较多,会导致列表比较长。因此,在进行应用和模块规划时,要充分考虑导航因素。

        • 功能

          一个功能定义一个 HTTP 请求,并在请求过程中完成一定的业务操作。

          一个模块由多个相关的功能构成。

          功能在 C# 或 Java 中将被创建为模块类的方法(函数),在数据库中被创建为存储过程。功能包含一组输入参数、输出参数或者输入输出参数。输入参数和输入输出参数的类型都是简单数据类型,输出参数可以是简单类型、对象或对象的集合。

          Pittypat 中所有的功能都只向客户端发送 JSON 数据。

          单个模块中最多可以创建 1024 个功能。

        • 参数

          功能中包含的 0 个、一个或多个参数。参数可以引用一个数据库表列,也可以不引用列。Pittypat 借助参数与列之间的引用关系创建数据库存储过程的 SQL 代码。

          功能参数在 JS 和存储过程中被映射为 camel 大小写的参数,为了防止与表列或视图列同名,Pittypat 可能会为存储过程或函数的参数自动添加前缀或后缀,比如 MySQL 中添加 '$' 作为前缀,MS SQL SERVER 中添加 '@' 作为前缀,而 ORACLE 中添加 '$' 作为后缀。

          在 C# 和 Java 中,Pittypat 不会将功能参数映射到一个方法或函数的参数,而是为整个功能创建一个从 FunctionArgs 继承而来的类,参数则是该类中的一个公共属性或者公共字段。

          单个功能中最多可以创建 128 个参数。

        • 对象

          功能在进行业务操作过程中使用的一种数据逻辑结构,定义了物理结构的数据在模块中的逻辑结构,因此有时候也称为数据对象。

          一个模块中可能包含 0个、一个或多个对象。对象不能跨越模块使用,以降低模块之间的耦合。

          传统 ORM 是将数据库表直接映射为一个对象,但是 Pittypat 允许设计师设计对象,当然也可以从数据库表创建对象,然后再进行调整。

          对象在 C# 或 Java 中将被创建为实体类,在数据库中被创建为视图。在 Pittypat 中,它们的作用非常简单,就是作为功能返回的单个对象或对象的集合。对象或对象集合在发送给客户端时被转换为 JSON 对象或 JSON 对象的数组。

          单个模块中最多可以创建 1024 个对象。

        • 属性

          对象中包含的属性。属性可以引用一个数据库表列,也可以不引用列。Pittypat 借助属性与列之间的引用关系创建数据库视图的 SQL 代码。

          单个对象中最多可以创建 128 个属性。

        • 数据的物理存储结构。

          单个应用中最多可以创建 1024 个表。

        • 表中包含的列。

          单个表中最多可以创建 128 个列。

        • 索引

          表中包含的索引。

          单个表中最多可以创建 128 个索引。

        • 数据库架构

          一个应用在目标数据库中对应一个数据库架构。MySQL 中数据库架构就是数据库。

        • 视图

          一个对象在数据库中对应一个视图。

        • 存储过程

          一个功能在数据库中对应一个存储过程。

      4. 简单数据类型

        Pittypat 中使用独立于具体语言和数据库平台的数据类型。

        1. string(n)

          最大长度为 n 的字符串。

        2. binary(n)

          最大长度为 n 的二进制流。

        3. bool

          布尔值。true 或 false。

        4. date

          日期值。1900/01/01 到 9999/12/31。

        5. datetime

          日期时间值。1900/01/01 00:00:00 到 9999/12/31 23:59:59。

        6. decimal(n)

          精确的十进制数字,n 表示小数点后的位数,也就是精度,最大不能超过 28。

        7. float32

          32 位浮点数。-3.4 × 1038 到 +3.4 × 1038

        8. float64

          64 位浮点数。±5.0 × 10−324 到 ±1.7 × 10308

        9. int8

          8 位有符号整数。-128 到 127。

        10. int16

          16 位有符号整数。-32,768 到 32,767。

        11. int32

          32 位有符号整数。-2,147,483,648 到 2,147,483,647。

        12. int64

          64 位有符号整数。-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

          在 JS 中安全的整数范围是 -(253 - 1) 到 (253 - 1) (-9,007,199,254,740,991 到 9,007,199,254,740,991),也就是 53 位数字而不是 64 位数字。超过 53 位的整数在 JS 中可能无法精确表达,此时可能需要借助于第三方的库进行操作,比如 long.js(已经包含在 pittypat.js 中)。为保证 64 位整数的精确性,Pittypat 在将 64 位整数转换为 JSON 时,无论其实际值的范围是否超出安全整数的范围,都一律转换为字符串值,而不是转换为 JS 数字类型的值。

        13. uuid

          全局唯一标识符,或通用唯一标识符。

          uuid 值在发送到客户端时转换为长度为 22 的 BASE64 字符串。在数据库中,如果存在对应的类型,则使用该类型,否则使用 16 个字节的二进制类型。

    2. 设计原则

      1. 向后兼容

        如果开发者希望新设计的应用版本向后兼容,应该遵循以下一些原则:

        • 不要修改表的标识符。可以为表添加新列或索引,但不要删除列,不要修改列的标识符、数据类型,字符串和二进制类型的最大长度可以扩展,但是应该充分评估。索引可以被删除,但是不建议这么做。

        • 模块

          不要修改模块的标识符,不要删除模块。因为这些模块可能被其他应用或模块作为服务使用。

        • 功能

          不要修改功能的标识符,不要删除功能。不要删除参数,或者修改参数的标识符、数据类型,字符串和二进制类型的最大长度可以扩展,但是应该充分评估。也不要为功能添加新的参数,如果必须要添加新的参数,那么应该考虑复制和重命名目标功能,然后在副本上添加新的参数。

        • 对象

          不要修改对象的标识符,不要删除对象。不要删除对象属性,或者修改对象属性的标识符和数据类型。也不要为对象添加新的对象属性,如果必须要添加新的属性,那么应该考虑复制和重命名目标对象,然后在副本上添加新的属性。

    3. 数据库设计

      数据库设计的工作主要是设计数据库表以及定义数据库表的列和索引。

      在 Pittypat 中,每一个应用都使用自己独立的一组数据库表,这些数据库表应该使用一个独立的数据库架构作为容器。默认的 Pittypat 使用 {开发者代码}_{应用标识符} 作为数据库架构的标识符。

      Pittypat 在设计数据库时与具体的数据库平台(比如 MySQL、SQL SERVER、ORACLE 等)无关,在输出代码时,用户可以选择应该输出为哪一个数据库的 SQL 脚本,这意味着用户只需要设计一套数据库就能在多种不同的数据库平台上使用。

      1. 添加新表

        从页面右上角菜单中选择添加新版,开始创建一个新的数据库表。需要为新表定义如下的一组属性:

        1. 位置

          指示在 Pittypat 的显示界面上,表的前后显示顺序。该顺序并不决定在数据库管理系统中的显示顺序。

        2. 标识符

          表的标识符,需要满足前述的标识符条件,并且在同一个应用中,表的标识符必须是唯一的。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 选项

          • 添加自增主键

            如果选中此选项,创建表的同时会自动为数据库表添加一个标识符为 “PK” 的列,该列的类型为 int64,并且是自增的。在一些数据库中这将是聚集索引的列。选中此选项会同时创建标识符为 “K_{表标识符}” 的主键索引,比如如果表的标识符是 “Users”,那么主键标识符将是 “K_Users”,如果此前数据库中已经存在相同标识符的索引,则不会创建索引,也不会创建新表,而是返回错误信息。

          • 添加唯一 Id 列

            如果选中此选项,创建表的同时会自动为数据库表添加一个标识符为 “Id” 的唯一列,该列的类型为 uuid。选中此选项会同时创建标识符为 “U_{表标识符}_Id” 的唯一索引,比如如果表的标识符是 “Users”,那么索引标识符将是 “U_Users_Id”,如果此前数据库中已经存在相同标识符的索引,则不会创建索引,也不会创建新表,而是返回错误信息。

        5. 描述

          对表的描述信息,不能超过 2000 个字符。

      2. 复制表

        Pittypat 提供了复制表的功能,可以快速创建一个与现有数据库表类似的新表。

        1. 位置

          指示在 Pittypat 的显示界面上,表的前后显示顺序。该顺序并不决定在数据库管理系统中的显示顺序。

        2. 标识符

          表的标识符,需要满足前述的标识符条件,并且在同一个应用中,表的标识符必须是唯一的。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 描述

          对表的描述信息,不能超过 2000 个字符。

        复制表会同时复制表中的列和索引,其中索引的标识符会被自动修改为以新的表为前缀。假设 “Users” 表复制后新的标识符为 “SystemUsers”,那么索引 “U_Users_Id” 将被复制为 “U_SystemUsers_Id”。如果在复制过程中发现索引 “U_SystemUsers_Id” 此前已经存在,那么将忽略复制索引,但是表还是会复制成功。

      3. 设置表

        设置表的属性。

        1. 位置

          指示在 Pittypat 的显示界面上,表的前后显示顺序。该顺序并不决定在数据库管理系统中的显示顺序。

        2. 标识符

          表的标识符,需要满足前述的标识符条件,并且在同一个应用中,表的标识符必须是唯一的。表的新标识符不能与其某列的标识符相同,比较不区分大小写。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 描述

          对表的描述信息,不能超过 2000 个字符。

      4. 删除表

        删除表会同时删除表中的列和索引。如果列已经被功能参数或对象属性引用,那么引用关系会被解除,功能参数和对象属性不会被删除。

      5. 添加新列

        为一个表添加一个新的列。

        1. 位置

          指示列在数据库表中的先后顺序,同时影响 Pittypat 的显示顺序和数据库管理系统中列的顺序。

        2. 标识符

          列的标识符,需要满足前述的标识符条件,并且在同一个表中,列的标识符必须是唯一的。列的标识符不能与其隶属表的标识符相同,比较不区分大小写。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 数据类型

          简单数据类型之一。

        5. 选项

          • 可空

            指示列的值是否可以为数据库空值(NULL)。

          • 主键

            指示是否要将列创建为主键。如果选中此选项,会同时创建一个新的主键索引。索引的标识符格式为:K_{表标识符}。如果相同标识符的索引此前已经存在,或者主键已经存在,则产生错误,不会创建列和索引。

            如果此前表中不存在聚集索引,Pittypat 会尝试将新的主键索引创建为聚集索引,如果此前已经存在聚集索引,则新的索引不会被创建为聚集索引。

          • 唯一

            指示是否要将列创建为唯一列。如果选中此选项,会同时创建一个新的唯一索引。索引的标识符格式为:U_{表标识符}_{列标识符}。如果相同标识符的索引此前已经存在,则产生错误,不会创建列和索引。

          • 定长

            指示字符串或二进制流的长度是否是固定长度。选中此选项,会将数据类型映射为定长的 char 和 binary,而不是 varchar 和 varbinary。

          • ASCII

            指示字符串是否仅仅包含 ASCII 字符。在 SQL SERVER 中,选中此选项数据类型将使用 char 或 varchar,而不选择此选项则使用 nchar 和 nvarchar。

          • 自增

            指示列的值是否是自增的,仅对整数类型有意义。

        6. 描述

          对列的描述信息,不能超过 2000 个字符。

      6. 设置列

        设置一个列的属性。

        1. 位置

          指示列在数据库表中的先后顺序,同时影响 Pittypat 的显示顺序和数据库管理系统中列的顺序。

        2. 标识符

          列的标识符,需要满足前述的标识符条件,并且在同一个表中,列的标识符必须是唯一的。列的标识符不能与其隶属表的标识符相同,比较不区分大小写。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 数据类型

          请参见添加列时的数据类型列表。如果前后数据类型不一致,那么引用了列的对象属性的数据类型也将同时被修改为新的类型。但是引用了列的功能参数的类型不会被修改,因为修改参数的类型会导致一连串的功能、模块以及 App 规模的重新计算。设计师应该注意在修改列的数据类型后是否要重新调整相应参数的数据类型。

        5. 选项

          • 可空

            指示列的值是否可以为数据库空值(NULL)。

          • 主键

            指示是否要将列创建为主键。如果选中此选项,会同时创建一个新的主键索引。索引的标识符格式为:K_{表标识符}。如果相同标识符的索引此前已经存在,或者主键已经存在,则产生错误,不会创建列和索引。

            如果此前表中不存在聚集索引,Pittypat 会尝试将新的主键索引创建为聚集索引,如果此前已经存在聚集索引,则新的索引不会被创建为聚集索引。

          • 唯一

            指示是否要将列创建为唯一列。如果选中此选项,会同时创建一个新的唯一索引。索引的标识符格式为:U_{表标识符}_{列标识符}。如果相同标识符的索引此前已经存在,则产生错误,不会创建列和索引。

          • 定长

            指示字符串或二进制流的长度是否是固定长度。选中此选项,会将数据类型映射为定长的 char 和 binary,而不是 varchar 和 varbinary。

          • ASCII

            指示字符串是否仅仅包含 ASCII 字符。在 SQL SERVER 中,选中此选项数据类型将使用 char 或 varchar,而不选择此选项则使用 nchar 和 nvarchar。

          • 自增

            指示列的值是否是自增的,仅对整数类型有意义。

        6. 描述

          对列的描述信息,不能超过 2000 个字符。

      7. 删除列

        删除列可能会同时删除包含列的索引。如果目标索引中仅有一个列,那么索引也将被删除,否则索引不会被删除,但是索引与列的关系将被删除。

        如果列被功能参数或对象属性引用,则引用关系也将被删除,但是功能参数和对象属性不会被删除。

      8. 添加新索引

        为表添加一个新的索引。

        1. 位置

          指示索引在 Pittypat 的显示顺序。

        2. 标识符

          列的标识符,需要满足前述的标识符条件,不同的是最大长度是 63。索引的标识符是在应用范围(数据库架构范围)内唯一的,而不仅仅是表的范围内,有一些数据库平台对此可能有要求。

        3. 选项

          • 主键

            指示索引是表的主键。

          • 唯一

            指示索引是否是唯一索引。

          • 聚集

            指示索引是否是聚集索引。

        4. 索引列

          选择一个或多个索引列。

        5. 描述

          对索引的描述信息,不能超过 2000 个字符。

      9. 设置索引

        设置一个索引的属性。

        1. 位置

          指示索引在 Pittypat 的显示顺序。

        2. 标识符

          索引的标识符,需要满足前述的标识符条件,不同的是最大长度是 63。索引的标识符是在应用范围(数据库架构范围)内唯一的,而不仅仅是表的范围内。

        3. 选项

          • 主键

            指示索引是表的主键。

          • 唯一

            指示索引是否是唯一索引。

          • 聚集

            指示索引是否是聚集索引。

        4. 索引列

          选择一个或多个索引列。

        5. 描述

          对索引的描述信息,不能超过 2000 个字符。

      10. 删除索引

        删除索引会同时删除索引与列的引用关系,但是列不会被删除。

    4. 模块设计

      模块设计是根据需求说明书对应用中的模块进行划分和创建,不包括设计模块中的功能和对象。

      在 Pittypat 中,模块是权限分配的单位。设计师在设计模块时应该重点考虑用户权限。其次,如果一个模块公开为 UI,Pittypat 会为模块创建前端源代码文件(比如在 H5 中可能包括 CSS、JS 和 HTML文件),并且模块会出现在导航列表中。

      因此规划模块时,应该主要考虑业务与交互、用户权限和导航。

      1. 一个模块只对应一个业务环节,该业务环节只有一类用户进行操作。

      2. 一个 UI 模块的第一个功能是入口功能。其他功能可能通过对话框实现,也可能通过独立页面实现。

      3. 不要在不同的用户角色之间共享同一个模块,这会增加模块业务的实现复杂度。如果两个用户角色使用相似的模块,通过复制功能为每一个用户角色创建一个独立的模块。

      4. 导航列表只有两级,第一级为应用,第二级为模块。如果一个应用中 UI 模块太多,会导致该应用下的二级导航列表过长,造成不好的用户体验。

      模块是功能的集合,模块内部具有极高的内聚度。模块之间,除了在数据层面上可能会共享数据之外,默认不存在耦合关系。

      1. 模块的版本

        Pittypat 内部会为每一个模块维护一个设计版本号和一个编码版本号,它们都是 uint16 类型的值。设计师在提交模块的功能设计和编码工作时,Pittypat 会自动递增模块的设计版本号或编码版本号。

        在应用升级时,模块的设计版本号和编码版本号都会被清零。

      2. 添加新模块

        为应用创建一个新的模块。

        1. 位置

          指示在 Pittypat 的显示界面上,模块的前后显示顺序。该顺序还决定在导航列表中模块目录的显示顺序。

        2. 标识符

          模块的标识符,需要满足前述的标识符条件,并且在同一个应用中,模块的标识符必须是唯一的。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 公开方式

          指示以何种方式向客户端公开模块中的功能。有三种方式:

          • 不公开

            客户端无法访问模块中的功能,这些功能仅仅在内部调用使用。

          • UI(用户界面)

            公开为 UI,此时可以通过浏览器、小程序或移动应用等访问。Pittypat 会为这样的模块创建前端源代码文件。

          • 服务

            公开为服务,此时可以通过浏览器、小程序或移动应用等访问。Pittypat 不会为这样的模块创建前端源代码文件。

        5. 选项

          • 是否允许匿名用户访问

            指示模块中的功能是否允许尚未登录的匿名用户访问。

        6. 描述

          对模块的描述信息,不能超过 2000 个字符。

      3. 复制模块

        可以通过复制的方式快速创建一个新的类似的模块。复制模块会同时复制模块中包含的所有组件,并自动调整它们之间的引用关系。

        参数 描述
      4. 设置模块

        1. 位置

          指示在 Pittypat 的显示界面上,模块的前后显示顺序。该顺序还决定在导航列表中模块目录的显示顺序。

        2. 标识符

          模块的标识符,需要满足前述的标识符条件,并且在同一个应用中,模块的标识符必须是唯一的。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 公开方式

          指示以何种方式向客户端公开模块中的功能。有三种方式:

          • 不公开

            客户端无法访问模块中的功能,这些功能仅仅在内部调用使用。

          • UI(用户界面)

            公开为 UI,此时可以通过浏览器、小程序或移动应用等访问。Pittypat 会为这样的模块创建前端源代码文件。

          • 服务

            公开为服务,此时可以通过浏览器、小程序或移动应用等访问。Pittypat 不会为这样的模块创建前端源代码文件。

        5. 选项

          • 是否允许匿名用户访问

            指示模块中的功能是否允许尚未登录的匿名用户访问。

        6. 描述

          对模块的描述信息,不能超过 2000 个字符。

      5. 删除模块

        删除模块会同时删除模块中的所有功能、功能参数、对象和对象属性。

    5. 功能设计

      功能设计是指设计一个模块中使用的数据对象和对象属性,设计功能和定义功能参数。

      1. 添加新对象

        为模块添加一个新的数据对象。

        数据对象和对象集合作为两种复杂数据类型只能用于功能的输出参数。

        1. 位置

          对象在同一个模块中的先后顺序,主要影响在界面上的显示顺序。

        2. 从表中创建

          选择一个数据库表,Pittypat 会自动将该数据库表映射创建为一个对象,表中的列创建为对象的属性。

        3. 标识符

          对象的标识符,需要满足前述的标识符条件,并且在同一个模块中,对象的标识符必须是唯一的。

        4. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        5. 描述

          对对象的描述信息,不能超过 2000 个字符。

      2. 复制对象

        将一个对象复制到当前模块或其他模块中。

        1. 复制到

          指示将对象复制到哪一个模块。

        2. 位置

          对象在目标模块中的先后顺序,主要影响在界面上的显示顺序。

        3. 标识符

          对象的标识符,需要满足前述的标识符条件,并且在同一个模块中,对象的标识符必须是唯一的。

        4. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        5. 描述

          对对象的描述信息,不能超过 2000 个字符。

      3. 设置对象

        1. 位置

          对象在目标模块中的先后顺序,主要影响在界面上的显示顺序。

        2. 标识符

          对象的标识符,需要满足前述的标识符条件,并且在同一个模块中,对象的标识符必须是唯一的。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 描述

          对对象的描述信息,不能超过 2000 个字符。

      4. 删除对象

        删除一个对象及其所有属性。如果对象已经被模块中的功能参数引用(作为输出参数的数据类型),那么参数不会被删除,但是参数与对象之间的引用关系会被删除。因为该引用关系被删除,参数隶属功能的规模将会被重新计算。

      5. 添加新属性

        对指定的对象添加一个新的属性。

        1. 位置

          属性在同一个对象中的先后顺序,影响在界面上的显示顺序、属性在实体类或 json 对象中的前后顺序、列在视图中的前后顺序。

        2. 引用列

          对象属性可以引用某一个数据库表的某一个列,也可以不引用任何列。如果属性引用了一个列,Pittypat 会自动为视图编写表列到视图列的映射代码,比如 Users.Name as UserName。如果属性不引用列,Pittypat 创建的代码是 null as UserName,那么通常表示视图列需要编码人员自己编写代码,比如在 MySQL 中可能是 if(Users.Name is null or Users.Name = N'', Users.LoginId, Users.Name)。删除一个数据库表列不会删除引用了该列的对象属性,但是引用关系会被删除。

        3. 标识符

          对象属性的标识符,需要满足前述的标识符条件,并且在同一个对象中,对象属性的标识符必须是唯一的。

        4. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        5. 数据类型

          属性的数据类型必须是简单基础类型,不能是复杂的对象或对象的集合。对象用于向客户端返回一个对象或对象集合,通常是从数据库表或视图中查询到的一行或多行数据,数据库表行或视图行的列的类型目前要求必须是简单类型。

        6. 描述

          对对象属性的描述信息,不能超过 2000 个字符。

      6. 设置属性

        1. 位置

          属性在同一个对象中的先后顺序,影响在界面上的显示顺序、属性在实体类或 json 对象中的前后顺序、列在视图中的前后顺序。

        2. 引用列

          对象属性可以引用某一个数据库表的某一个列,也可以不引用任何列。如果属性引用了一个列,Pittypat 会自动为视图编写表列到视图列的映射代码,比如 Users.Name as UserName。如果属性不引用列,Pittypat 创建的代码是 null as UserName,那么通常表示视图列需要编码人员自己编写代码,比如在 MySQL 中可能是 if(Users.Name is null or Users.Name = N'', Users.LoginId, Users.Name)。删除一个数据库表列不会删除引用了该列的对象属性,但是引用关系会被删除。

        3. 标识符

          对象属性的标识符,需要满足前述的标识符条件,并且在同一个对象中,对象属性的标识符必须是唯一的。

        4. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        5. 数据类型

          属性的数据类型必须是简单基础类型,不能是复杂的对象或对象的集合。对象用于向客户端返回一个对象或对象集合,通常是从数据库表或视图中查询到的一行或多行数据,数据库表行或视图行的列的类型目前要求必须是简单类型。

        6. 描述

          对对象属性的描述信息,不能超过 2000 个字符。

      7. 删除属性

        删除一个对象属性会导致引用了其隶属对象的功能的规模发生变化,Pittypat 会自动调整相应功能和模块的规模。

      8. 添加新功能

        为指定的模块添加一个新的功能。如果功能参数需要引用对象,目标对象应该事先定义。

        1. 位置

          功能在同一个模块中的先后顺序,主要影响在界面上的显示顺序、在模块类中的方法前后顺序以及数据库中存储过程的前后顺序。

        2. 标识符

          功能的标识符,需要满足前述的标识符条件,并且在同一个模块中,功能的标识符必须是唯一的。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 数据操作

          指示功能可能会对数据库执行那种操作,共有 8 中可能:

          • 无数据操作

            指示功能不对数据库进行任何操作,此时不为功能创建存储过程和数据库接口。业务主要由中间代码实现。

          • 不分页查询

            从数据库执行不分页的数据查询。

          • 分页查询

            从数据库执行分页的数据查询。

          • 查询单个对象

            从数据库查询单一的一行数据。

          • 查询单一简单值

            从数据库查询一个简单类型的值。

          • 添加数据

            向数据库添加一行或多行新的数据。

          • 更新数据

            向数据库更新一行或多行数据。

          • 删除数据

            从数据库删除一行或多行数据。

          选中一个选项,并非数据操作仅仅限定为这一种数据操作,比如删除一个表中数据的同时可能会更新其他表的数据。

          添加数据、更新数据、删除数据会默认启用数据库本地事务,而其他选项则默认不启用本地数据库事务。

        5. 选项

          • 是否启用数据库事务

            这里的数据库事务是指本地数据库事务,而不是分布式事务,目前 Pittypat 不支持分布式事务。数据库事务的启动、提交或回滚对开发人员是透明的,也就是说选中启用数据库事务时,编码人员不需要编写任何与事务相关的代码,事务的启动、提交或回滚完全由 Pittypat 运行时自动处理。

        6. 描述

          对功能的描述信息,不能超过 2000 个字符。

      9. 复制功能

        以复制的方式快速创建一个新的功能:

        1. 复制到

          指示将功能复制到哪一个模块。

        2. 位置

          功能在目标模块中的先后顺序,主要影响在界面上的显示顺序、在模块类中的方法前后顺序以及数据库中存储过程的前后顺序。

        3. 标识符

          功能的标识符,需要满足前述的标识符条件,并且在同一个模块中,功能的标识符必须是唯一的。

        4. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        5. 描述

          对功能的描述信息,不能超过 2000 个字符。

      10. 设置功能

        1. 位置

          功能在目标模块中的先后顺序,主要影响在界面上的显示顺序、在模块类中的方法前后顺序以及数据库中存储过程的前后顺序。

        2. 标识符

          功能的标识符,需要满足前述的标识符条件,并且在同一个模块中,功能的标识符必须是唯一的。

        3. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        4. 数据操作

          请参见添加新功能时的数据操作。

        5. 选项

          • 是否启用数据库事务

            这里的数据库事务是指本地数据库事务,而不是分布式事务,目前 Pittypat 不支持分布式事务。数据库事务的启动、提交或回滚对开发人员是透明的,也就是说选中启用数据库事务时,编码人员不需要编写任何与事务相关的代码,事务的启动、提交或回滚完全由 Pittypat 运行时自动处理。

        6. 描述

          对功能的描述信息,不能超过 2000 个字符。

      11. 删除功能

        删除一个功能及其所有参数。

      12. 添加新参数

        为指定的功能添加一个新的参数。

        1. 位置

          参数在同一个功能的参数列表中的先后顺序,影响在界面上的显示顺序、参数在功能的参数列表类或 json 对象中的前后顺序、参数在存储过程或数据库函数参数列表中的前后顺序。

        2. 作用

          参数所起的作用,共有 8 种预定义的不同作用。

          • 普通

            这是一个普通参数,没有特别的含义。

          • 页码

            在分页查询的功能中,参数起到传递页码的作用,页码从 1 开始。类型为 uint64。

          • 页面尺寸

            在分页查询的功能中,参数起到传递页面尺寸的作用,页码从 1 开始。页面尺寸限定了每次查询最多查询的行数。类型为 int64。

          • 返回总行数

            这是一个输出参数,在分页查询的功能中,用于向客户端返回符合条件的总行数,用于计算所需要的总页数。类型为 int64。

          • 排序名称 (*)

            在分页查询或不分页查询中指定按照哪一个数据库表列或视图列进行排序。类型为 string(30)。

          • 排序方向 (*)

            在分页查询或不分页查询中指定排序方向,必须是 'asc' 或 'desc'。类型为 string(4)。

          • 用户 Id

            在任何功能中向存储过程或数据库函数传递当前用户的 Id。类型为 uuid。用户 Id 不需要从客户端传递任何值,因为 Pittypat 会自动在中间层为该参数赋值。

          • 原始 Url

            指示参数值是一个代表了旧的文件的虚拟路径。比如上传头像文件时可能会需要删除原始头像文件,可以为功能添加一个返回原始头像文件路径的参数,中间层可以根据该指示自动生成删除原始文件的代码。

        3. 参数方向

          参数可以是输入参数、输出参数或者输入输出参数。只有当参数是输出参数时,其数据类型才可以使复杂类型(对象或对象集合),否则必须是简单基础类型。如果参数不是一个普通参数,那么参数的方向是不能修改的。

        4. 引用列

          参数可以引用某一个数据库表的某一个列,也可以不引用任何列。如果参数引用了一个列,Pittypat 可能会根据这种引用关系自动编写一些数据库操作代码。删除一个数据库表列不会删除引用了该列的参数,但是引用关系会被删除。

        5. 标识符

          参数的标识符,需要满足前述的标识符条件,并且在同一个功能中,参数的标识符必须是唯一的。

        6. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        7. 数据类型

          参数的数据类型可以是简单基础类型,也可以是复杂的对象或对象的集合。只有输出参数的数据类型才能是复杂类型。如果参数不是一个普通参数,那么参数的数据类型是不能修改的。

        8. 最大长度

          当参数类型是字符串或二进制流时,指定参数的最大字符长度或字节长度。当参数类型是 decimal 时,指定小数位数。其他数据类型忽略最大长度。

        9. 描述

          对参数的描述信息,不能超过 2000 个字符。

      13. 设置参数

        1. 位置

          参数在同一个功能的参数列表中的先后顺序,影响在界面上的显示顺序、参数在功能的参数列表类或 json 对象中的前后顺序、参数在存储过程或数据库函数参数列表中的前后顺序。

        2. 作用

          参见添加新参数时参数的作用字段。

        3. 参数方向

          参数可以是输入参数、输出参数或者输入输出参数。只有当参数是输出参数时,其数据类型才可以使复杂类型(对象或对象集合),否则必须是简单基础类型。如果参数不是一个普通参数,那么参数的方向是不能修改的。

        4. 引用列

          参数可以引用某一个数据库表的某一个列,也可以不引用任何列。如果参数引用了一个列,Pittypat 可能会根据这种引用关系自动编写一些数据库操作代码。删除一个数据库表列不会删除引用了该列的参数,但是引用关系会被删除。

        5. 标识符

          参数的标识符,需要满足前述的标识符条件,并且在同一个功能中,参数的标识符必须是唯一的。

        6. 名称

          最长不超过 50 个字符,可以是任何字符的组合。如果没有提供名称,则默认使用标识符作为名称。

        7. 数据类型

          参数的数据类型可以是简单基础类型,也可以是复杂的对象或对象的集合。只有输出参数的数据类型才能是复杂类型。如果参数不是一个普通参数,那么参数的数据类型是不能修改的。

        8. 最大长度

          当参数类型是字符串或二进制流时,指定参数的最大字符长度或字节长度。当参数类型是 decimal 时,指定小数位数。其他数据类型忽略最大长度。

        9. 描述

          对参数的描述信息,不能超过 2000 个字符。

      14. 删除参数

        删除一个参数会导致引用了其隶属功能的规模发生变化,Pittypat 会自动调整相应功能和模块的规模。

    6. 请参见