20

C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET...

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA%3D%3D&%3Bmid=2654076985&%3Bidx=1&%3Bsn=0342801f3c4175381c42dec040d3bb7b
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一般来说,我们需要在开发应用软件的配置文件中,添加一些参数,用于后续用户根据实际情况,自行调整。

配置参数,可以放在配置文件中、环境变量中、或数据库表中(如果使用了数据库的话)。通常,配置数据,以 key/value 的形式。

有时候,这种  key/value 的形式,不足以满足用户需求。比如,系统中有个定时删除临时文件的 job ,我们希望在客户工厂的生产交接班期间及员工吃饭时间,比如客户工厂生产交接班时间为 5:30 - 6:00 , 23:00-23:30, 中途吃饭时间为 11:00, 4:00。

也许,可以用正则表达式,来实现以上的功能。但实际情况一调查,我们发现,客户用户懂正则表达式的基本没有,我们自己公司软件开发人员懂正则表达式的也很少。如果做成正则表达式方式,后续代码交接之后,能不能维护/修改,也很难说。

这样,我们找到了"以 Javascript 的代码段,进行判断,作为配置参数值",这样可以完美地解决我们的问题。Javascript 基本语法简单,客户用户也可自行更改。

对于可在 C# 代码中使用的 Javascript 引擎,我们找到了两个:  Javascript .NET 与 Jint。前者依赖于 Goolge V8 引擎,运行时需要 Microsoft C Runtime Libraries, 后者则是纯 C# 代码组件。

为同时测试这两种,我们先进行代码抽象: 

Javascript 代码,可能无 package/namespace ,可能无 function ,只是一段代码。但无论如何,调用前赋值、调用程序、调用后获取需要的数值,这个基本逻辑,是不会变的。

a. 基础类定义如下:

miQjmaI.png!web

b. Javascript .NET 实现以上接口的代码如下:

qyUFRnR.png!web

c. Jint 实现此接口的代码如下:

jyeU3uv.png!web

d. 最后,调用代码里,可以自由切换以上两种 Javascript 引擎:

jeU32ye.png!web

e. 附上 Javascript 代码段:

var nowTime=new Date(); 

var canRunNow = false;

var nowHour = nowTime.getHours(); 

var nowMin = nowTime.getMinutes(); 

if ( nowHour == 22 && nowMin == 0 )

{canRunNow = true;}

或:

var nowTime=new Date(); 

var canRunNow = false; 

var nowMin = nowTime.getMinutes();

var nowSec = nowTime.getSeconds();

if ( nowSec % 3 == 0 )

{canRunNow = true;}

这样配置就很灵活了。

当然,这里的 Javascript 代码段 , 作为配置参数 (key/value 中的 value),我们把它的多个代码写成一行。其实,不写成一行,也是可行的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK