- - PR -
Javaソース生成アプリケーションの実現性について
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-10-01 23:04
顧客より以下のような内容(簡略化して書いています。)の
実現性に関して聞かれました。 [前提] ・他システムよりインタフェースデータを受取り、各項目に対する データチェック(数値チェック、日付チェックなど)をJavaの バッチ処理として行う。 ・インタフェースデータの仕様はまだ決まっておらず、また、 決まっても変わる可能性が高い。 [やりたい事] ・インタフェースデータに対して掛けたいチェックを定義ファイルに 定義し、それを「あるアプリケーション」を通し、Javaのバッチ処理を 行うJavaソースファイルを生成する。要するにソース生成をする アプリケーションの実現性を知りたい。 ・「あるアプリケーション」はどのような言語で作成してもよく、 動作環境の前提も特にない。 似たような内容の経験のある方、実現性の見える方、 ご回答頂けないでしょうか? | ||||||||
|
投稿日時: 2003-10-01 23:12
こういう経験がない開発者のほうが少ないように思われますが(そう考えるのは私だけ?)。 ちなみにこれはDB連携もありでしょうか?となるとソース以外に自動的にフィールド変更 やテーブル生成をやらなければならないとか・・・ | ||||||||
|
投稿日時: 2003-10-01 23:17
っていう要件に対して、ソースを動的に生成したくなる理由がわかりません・・・ 単純に考えて、チェックするデータのタイプごとにValidatorみたいなものを 準備しておき、ファイル形式に沿ってValidatorを呼ぶようなプログラムを 書いておけば、ソースの生成はいらないと思うのですが。 (固定長レコードであれば、フィールド長記述とデータタイプの組とか、 CSVであればデータタイプの列だとか、XMLであればエレメント名とデータタイプの組とか)
ソースコード生成だけならJSPでやってるのが一番身近だと思いますが、 参考にはしにくいでしょうね・・・ あとはJavaCCとかでしょうか? いずれにせよ、要件と実現方法の間の乖離が大きすぎるように見えます。 | ||||||||
|
投稿日時: 2003-10-02 00:02
説明がわかりづらかったので補足します。
例えば、 名前,ローマ字,生年月日,預金額 日本太郎,Taro Nihon,19701001,10000 というインタフェースがあった際に 以下のような定義ファイル(案)を用意しておき、 ======================== 名前,NON(チェックなし) ローマ字,E(英字) 生年月日,DATE(日付) 預金額,N(数字) ======================== それをあるアプリケーション(ソース生成アプリ)を通すと ======================== 名前→チェックなし、 ローマ字→英字チェック 生年月日→日付チェック 預金額→数字チェック ======================== というようなソースを生成してくれるというものをイメージしていました。 プログラム実行時に外部定義ファイルを読み込んでチェックをすると いう考えもありますが、外部定義ファイルを読むという時間を省き、 性能をあげたいというのが要望です。 | ||||||||
|
投稿日時: 2003-10-02 00:17
チェック対象項目のみで完結できる入力チェックなら可能だろうし
他の項目との兼ね合いが発生する条件チェックであれば、 手作業でソースを作成したほうが、ソース自動作成アプリをつくるより は早いし確実でしょう。 >いう考えもありますが、外部定義ファイルを読むという時間を省き、 >性能をあげたいというのが要望です。 外部定義ファイルを読むのを省くのは性能にいかほどの寄与があるのでしょうか? この検証はすんでいるのでしょうか? | ||||||||
|
投稿日時: 2003-10-02 00:47
このご質問の内容は、バリデータのことしか考えてないような気がしますが、
仮にそこだけに限定したとしても、数種類のメソッドを予め用意しておき どのメソッドを割り当てるかだけ決めればいいのではないでしょうか? ソース生成するだけ処理の無駄になってしまうような気がします。 それより、先ほども書きましたが、データ型の問題やデータの個数の変動により、 その後の処理をどうするのか。その方が余程大変だと思いますよ。 | ||||||||
|
投稿日時: 2003-10-02 01:27
ソース生成したあとコンパイルすることって考えてます? コンパイルなんてそんな単純なファイルをパースするより桁違いに時間かかりますよ。 | ||||||||
|
投稿日時: 2003-10-02 09:30
コンパイルが時間がかかるのなら、直接classを作ってしまえ! http://jakarta.terra-intl.com/bcel/ っていうのは、冗談ですけど。 見たところ、インターフェースデータはCSVのような感じで、カラム名とデータ型のマッピングに基いて、データのチェックをすればよいだけのようですね。 ならば、まりりさんの言うようにValidatorをデータ型ごとに用意するのがよいと思います。 データ定義ファイルからのValidatorの生成をAbstractFactory風に行って、Validatorを実行時に追加・変更できるようにしておくのがよいと思います。 しかし、『インタフェースデータの仕様はまだ決まっておらず、また、決まっても変わる可能性が高い。』というのが、どの程度変りうるのかをはっきりさせておくのが身のためだと思いますよ。 「今日からインターフェースはXMLになりました。」とか言われても、まず対応できないでしょうから。 | ||||||||
