组件编写

定义完Entity后,可以马上开始编写组件/页面(以下统一用“组件”作为主语)。

在编写组件前,首先要明确一个概念:用Oak框架编写业务应用,其中几乎所有的组件和绝大部分页面都关联在某一个Entity之上,根据组件的功能特征,我们可以将这类Entity组件划分为以下三种类型:

  • List:列表页,查询并显示此Entity的多条数据
  • Detail:详情页,查询并显示此Entity的(指定id的)某条数据
  • Upsert:更新页,查询并对此Entity的(指定id的)某条数据进行更新,或者创建一条新的数据。

当然,也允许用户编写一个不关联在任何Entity上的组件,我们称之为Virtual组件。关于Virtual组件的作用和规范,我们在组织组件章节中会加以描述。

下面将以oak-general-business包当中的SystemApplication这两个Entity作为示例,介绍如何编写Entity组件。

oak-general-business是Oak框架的一个基础业务逻辑包,在其中按照Oak框架的规范,实现了大量较为底层的功能逻辑,如用户管理、应用管理、授权管理、消息管理,文件管理等等。关于oak-general-business包的详细介绍请参见:todo。在这里,我们只需要了解ApplicationSystem这两个对象的意义和大概结构,在oak-general-business中,System代表一个业务系统(就是你正在开发的这个业务系统),而Application代表业务系统的一个前端应用。两者的数据结构大致如下(代码来源于oak-general-business/src/entities,为了简化去掉了一些属性):

  • Application
export interface Schema extends EntityShape {
    name: String<32>;
    description: Text;
    type: AppType;
    system: System;
    config: WebConfig | WechatMpConfig | WechatPublicConfig | NativeConfig;
    style?: Style;
};
  • System
export interface Schema extends EntityShape {
    name: String<32>;
    description: Text;
    config: Config;
    super?: Boolean;
    style?: Style;
};

在系统上线前,您需要配置相应的ApplicationSystem,例如小程序appId/appsecret、网站域名之类的属性。在这里我们并不过多介绍这两个对象的作用,只需要知道,Oak应用本身也是通过这两个Entity来进行管理的,超级管理员在系统正式运行之前需要对它们进行相应的管理操作(通过oak-general-business提供的这些组件。而在绝大多数业务系统中,这些参数都是通过config文件配置为系统的全局变量,这显然不如将之也当成业务对象来管理更加灵活、通用)。我们接下来就结合代码描述这些相关组件的实现。