飞道软件工厂

插件式开发

原子操作封装

1. 原子操作分类

按使用范围分类,可以分为项目原子操作和通用原子操作。项目原子操作代码在项目中,由开发人员自行创建和使用,其通用性只限于一个项目之内甚至一个项目的部分页面。而通用型原子操作则在多个项目甚至全部项目都适用。

在响应,服务,项目级原子操作中,均可引用原子操作。

举例一个常用的例子说明:比如一个项目中使用的数据库只有一个到两个,就可以将数据库名称封装进一到两个项目级原子操作中,从而减少调用时数据库名称传参。这样的做的好处是在数据库固定的情况下,可以加速项目的开发速度,且维护相对也简单。

2. 创建方法

通过vscode命令mmstudio: Add new atom创建。

2.1. 项目原子操作

可以在项目中实现某个通用操作,其代码实现制作为一个原子操作index.ts(目前限定其为某一个函数),并将其插入代码模板写入use.snippet。也可以将项目中常用的几个原子操作的使用编写为一个原子操作,在项目中快速引用。

2.1.1. 示例

上面提到过,在项目中可以添加一些项目级的原子操作,以方便开发使用。例如某项目只有两个数据库,一个为配置库,一个为业务库,我们可以将对这两个数据库的原子操作进行简单封装,以方便项目使用。具体做法为

  1. 在项目中添加项目级原子操作,快捷键为alt+m a
  2. 参数个数设置为2个(如果没有参数,可以设置为0)
  3. 使用快捷键添加sql查询原子操作alt+t a
  4. 插入数据库原子操作(编号14),并修改参数如下所示:

     import an14 from '@mmstudio/an000014';
    
     export default async function anp1<T>(sql: string, ...args: unknown[]) {
         // sql查询
         /**
         * 数据库返回值
         */
         const [r1603335417] = await (() => {
             const p1 = 'db001';
             return an14<T>(p1, [sql, args]);
         })();
         return r1603335417;
     }
    
  5. 接下来,我们将代码模板修改好,如下所示

     // 业务库sql查询
     /**
      * ${0:查询数据表结果}
      */
     const r$CURRENT_SECONDS_UNIX = await(() => {
         const p1 = '$1';	// sql,示例见下:
         // postgres:	insert into tb001 (name) values (\$1),(\$2),(\$3);
         // mysql:		insert into tb001 (name) values (?),(?),(?);
         interface ITable {
             id: string;
         }
         return anp1<ITable>(p1);
         // const p21 = 'mmstudio001';	// sql中占位符对应的参数值
         // const p22 = 'mmstudio002';	// sql中占位符对应的参数值
         // const p23 = 'mmstudio003';	// sql中占位符对应的参数值
         // return anp1<ITable>(p1, p21, p22, p23);
     })();
    
  6. 这样一个项目级的原子操作就完成了,使用它进行单表的查询将会变得非常简单。我们如果要在某个服务中使用它,只需要打开服务文件,使用快捷键alt+t a本地选择anp001就可以快速添加了

2.2. 代码模板snippet的写法

其实上面的示例已经展示了代码模板的写法,下面为一些说明。

  1. 普通的文本按原样插入到使用位置
  2. $为一个特殊字符,如果要在代码模板中输入一个字符$,必须加上转义符\,即\$方可。
  3. 如果$它后跟一个数字,如$1,$2,则表示一个停止符,在插入原子操作时通过tab键可以按$后的数字切换光标位置。
  4. $后如果后跟大括号,如${1},${2},其作用同$1,$2
  5. $后大括号中数字后如跟:,如${1:val},则:后为默认插入内容,当光标停留时默认内容将被选中,且可修改
  6. $后大括号中数字后如跟|,需要保证大括号结束前也要有一个|,如${1:|a,b,c|},则|之间的内容当光标停留时将按,分隔,作为枚举列表供选择,注意应当按实际使用场景调整顺序。
  7. $CURRENT_SECONDS_UNIX为一个数字值,通常它是唯一的,可以用它作为变量名

3. 通用原子操作

3.1. 通用型原子操作

注意事项:

  1. 最好先确定好原子操作的名称,因为它将展示给所有开发人员,尽可能将其描述精确、简练。
  2. 希望加入团队的人员请联系我.我将非常乐意接受社区的贡献。
  3. 原子操作要有单元测试,否则有可能将无法通过审核合并。