-GWA2更新:扩展增加read/writeObject to setBy/getBy

继续需求驱动,-GWA2 扩展增加read/writeObject 到 setBy/getBy中,对数据持久化层的访问增加了对文件系统和远程接口的支持。本周还深入了解了 -ThinkPHP 这一开发框架,随着对其深入理解,也再次陷入了为何需要,为何那么多开发框架被开发出来 这样的思考题中。

但这个问题现在还没有解,采用类比思考的方法,人们所说的话,为何有那么多语言? 同一门语言,为何有那么多种方言? 计算机操作系统为何有那么多分类? 同样是Linux操作系统,为何有那么多分支旁系?也许世界原本是多态和丰富的,世界的多样性,大多是个体的差异所导致。比如,世界上应该有最好的某个苹果,也有最差的某个梨子,只是个体和子群的所处环境、认知差异等,导致一个绝对意义上的好的苹果在A或者A群看来是好的或者最好的,在B或者B群看来是差的或者最差的,在C或者C群看来,很一般般,而D或者D群可能说,这是什么东西。没错,他们都没有错,从他们自己的观点、视角和认知来看,他们的判断是符合一般逻辑推理过程的。

在“化干戈为玉帛:平息争执的四个方法( -R/X2Tc )”的文章中,我们曾观察到“人将自己视为真理,可能是所有争执的起源,所有战争的导火索”。也许这能很好地解释,哪种开发框架好,为何有那么多软件开发框架被开发出来。

归正,在技术实现上, -GWA2 的设计中,此前将所有对对象的改变,默认持续化存储是 数据库,没有深入考虑或者实现其扩展将持久化存储到其他方式方法,比如网络、文件系统等,本周在研发中遇到实例,就顺便将改变状态的主方法 getBy/setBy做了扩展,使之能够支持读写文件和网络访问。也即,增加了 readObject/writeObject。 其技术细节如下:

1. readObject
在 getBy 中判断 getBy 的第一个参数 $fields 中是否包括 “:”, 如果包括,则视为读取文件系统或者网络系统,而不是数据库系统。
进一步地,当判断成从非数据库读取时,则分别判断是:
a) ‘file:’ , 这个关键词表示,从文件系统读取;
b) ‘url:’ , 这个关键词表示,从网络远程通过URL读取。
-gwa2-readObject-201605

2. writeObject
同样地, 在 -GWA2 中,在 setBy 方法中,判断其第一个参数 $fields, 如果保护有 ‘:’ 关键词,则视为存储持久化到非数据库系统,由此将处置权交给 writeObject. 在 writeObject 中进一步地判断:
a) 若存储为 ‘file:’ 关键词,则调用文件写操作系统;
b) 若存储为 ‘url:’ 关键词,则存储为进一步调用远端接口,此时为触发 HTTP POST/GET 方法,封装细节见程序代码。

3. 调用样例
调用上述写入或者读取非数据库的持久化趁,使用:
$obj = $webappInstance->getBy(‘url:’, $args);
$obj = $webappInstance->getBy(‘file:’, $args);
$obj = $webappInstance->setBy(‘url:’, $args);
$obj = $webappInstance->setBy(‘file:’, $args);
其中,当 ‘file:’ 时,
$args = array(‘target’=>’xxx’, ‘content’=>’xxx’, ‘islock’=>1, ‘isappend’=>1);
当 ‘url:’ 时,
$args = array(‘target’=>’xxx’, ‘method’=>’xxx’, ‘header’=>array(‘headerxxx’=>’headerxxx_value’), ‘parameter’=>array(‘parameter_1’=>’parameter_1_value’));
上述方法的返回值,遵循 getBy / setBy 的定义,统一规范为
return array(boolean <true|false>, array(‘content’=>$returnObject, ‘errorcode’=>’xxxx’, ‘errordesc’=>’xxxx’));
其中, 成功 true 时,只有 content 的键值; 失败 false 时,只有 errorcode 和 errordesc 。
如下是几个实例:
-gwa2-readObject-example-201605

其中,errorcode 是 -GWA2 特有的一种标记系统,系全局所有,用于全局定位。 默认采用 timestamp 的 YYmmddHHMM 十位数字系统。

—- —- —- —-

当编程语言不再是羁绊时,思想和文化变作为主因,比如上面修改中,为何要将 read/writeObject 融入到 getBy/setBy 中,而不是在 WebApp 中直接调用?

 

This entry was posted in -gMIS, -GWA2, 编程技术, 计算机技术 and tagged , , , , , . Bookmark the permalink.

One Response to -GWA2更新:扩展增加read/writeObject to setBy/getBy

  1. Wadelau says:

    getBy(‘url:’, $args), setBy(‘url:’, $args) 可以极大地简化现在内外部基于API开发的流程。

发表评论

电子邮件地址不会被公开。 必填项已用*标注