以前に書いたエントリで
WindowsのWSH上でPrototype.jsを利用するやり方がわかったので、普段の仕事を効率化させるツールがあともうちょっとで完成しそうなんだけど、いままでコツコツ勉強していたおかげかもしれないけど、急に視界が開けた感じがしてて、イイ感じに機能毎に分ける事が出来てきた。と書いたけど、色々あってスクラップ&ビルドすることにしました。
別に問題なく動いているんだけど、なんていうか色々な機能を付け加えるのにものすごく勝手が悪い作りになっているので、このままの状態で機能追加していくと、増改築を繰り返す旅館のような状態になるのは目に見えているので、折角つくったものだけど、考え直す事にしました。
考え直すにあたって、増補改訂版Java言語で学ぶデザインパターン入門という本をものすごく昔に衝動買いしてずっと積ん読状態だったけど、今の自分のタイミングでこの本を読むのがまさにピッタリだったので、デザインパターンについて勉強しながらどのパターンを適用すればいいのかを試行錯誤してます。
とりあえずソースを晒すとこんな感じ。(あーちなみに、WindowsのWSH上でPrototype.jsを利用することが前提で考えています)
--model.js--
var parentModel = Class.create({
connectDB:function(sql){
var _obj = function(){};
var strConnection = "File Name=C:\\udl\\xxxx.udl";
var objADO = new ActiveXObject("ADODB.Connection");
objADO.0pen(strConnection); // 注)Openは数字のゼロになっています。
var objRS = objADO.Execute(sql);
return objRS.getRows().toArray();
}
});
--staff.js--
var Staff = Class.create(parentModel,{
initialize: function(sql){
var _rs = this.connectDB(sql);
this.name = _rs[0];
},
getName:function(){
return this.name;
}
});
--Order.js--
var Order = Class.create(parentModel,{
initialize: function(sql){
var _rs = this.connectDB(sql);
this.order_cd = _rs[0];
this.info = _rs[1];
},
getOrderCD:function(){
return this.order_cd;
},
getInfo:function(){
return this.info;
}
});
基本的なDBへの接続処理はmodelで定義されていて、それを継承する形でそれぞれのモデルを定義するイメージで、Staff.jsもOrder.jsもmodel.jsを継承。継承の機能はPrototype.jsの1.6の書き方でやってみた。
あとは、main.wsfというファイルの中で、prototype.js、model.js、Staff.js、Order.jsというのを読み込んで
var strSQL = "SELECT name,cd "
+ "FROM xxxx "
+ "WHERE cd = '123456789'";
var user1 = new JCStaff(strSQL);
WScript.Echo(user1.getName());
とすると、欲しい情報が取得できるって段取りまで出来た。
昔から、user1.getName()みたいな形の書き方が出来るようになりたいなぁーと思ってたので、我ながら成長を実感した今日この頃。もう眠いので今日はここまで。
結城 浩
ソフトバンククリエイティブ
売り上げランキング: 16922
ソフトバンククリエイティブ
売り上げランキング: 16922