DOAに対する妄想が消えた、XEAD Driverの歩き方(2011年DOA学習のまとめ)

上流工程、下流工程、設計工程、実装工程
何もかも全部一人でやる零細何でも屋は、分業先の受け皿が無いので
キーワードで分割されたようには行かない。

上流工程だけを身につけることができたとしても、絵に描いた餅となる。
書いてあることは判るけれど、じゃあいったいどうやって実装するの...
あーでもない、こーでもない。なんかネットに資料は無いかと調べ始める。
妄想は限りなく広がっていくのである。

上流も下流も両方伴わないと完結しない。
DOAに関する本を読んでも上流、下流を一貫しシステムのプロトタイプとして使えるまでの
参考になる資料は皆無であった。

渡辺幸三氏のXEAD Driverは、今年正式版としてリリースされた。

XEAD Driverは、オープンソースとしてGitHubで公開されている。
https://github.com/xead
システムとしては、以下の2種のJAVAプロジェクトで構成されているのでご注意ください。
 XeadEditor
 XeadDriver

注:XeadDriver V1R0M07までのソースはコンパイル可能
XEAD Driver V1R0M08以降は、不足情報があり完全にコンパイルができません。
(環境の設定に問題があり、リポジトリの不整合がおきているようです、修正予定と伺いました。)
XeadEditorはすべてエラー無くコンパイル可能です。
(開発環境Eclipse3.7(pleiades)、NetBeans7.0.1で動作確認)

以下、
「XEAD Driver」はシステム全体を表現
「XeadEditor」は、JAVAプロジェクト
「XeadDriver」は、JAVAプロジェクト として記述します。


詳細は、以下のページをご一読ください。
http://homepage2.nifty.com/dbc/xeadDriver.html
実行ファイルもインストーラ付きで配布されています。

XEAD Driverは
販売管理システムで学ぶモデリング講座
http://www.amazon.co.jp/dp/4798117048/
で説明されている販売管理システムをJAVAで実装したシステムです。

詳細な設計情報が、コンセプトウェアとしても同梱させてあり、
最新のSalesOrosi.xeadをXeadModelerで閲覧することができます。


渡辺氏の5冊の著書には、具体的な実装に関するコードが
全く明示されていません。

4冊の本は上流工程、モデリング、業種別のモデリング解説。

販売管理システムで学ぶモデリング講座 (DB Magazine SELECTION) は、
「CONCEPTWARE/販売管理」の詳細な仕様書です。
この本を元に実装したらどんなシステムになるのか、
もし渡辺氏が実装したシステムを見れるのならお願いして
見せてもらうことはできないかと思っていました。

しかし、待てば海路の日和あり、
現在、渡辺氏が公開されている XEAD Driverでオープンソースとして
全てが明らかになりました。

データモデルを設計すれば編集画面は自動的に生成されます。
コードを分析するとシステムを構築する上で必要な基本的な内容は
全て入っていると思って間違いないです。

DOAを学習するプログラマは実装コードを見たくなるものですが、
渡辺氏には、中途半端な断片的なコードを晒しても混乱を招くだけなので、
全体が完成するまで表に出さないそんな意図があったのだろうと思います。



アプリケーションとして作動するシステムの実態は
XeadEditorで仕様書をXMLファイルとして定義し、
XeadDriverが定義されたXMLファイルを動的に処理する。


1.XEAD Driverの特徴
 ツールXeadEditorで仕様書を作成する。
 仕様書はXMLで記述される。
 XeadDriverを起動すると、XMLファイルを読み込み
 その仕様に基づいてシステムが動作する。

2.XEAD Driverの構造
 XeadEditorでテーブル設計を行う。
 XeadEditorで作成するテーブルは、仮想的なテーブルであり、物理的な列(項目)に加えて
 導出項目(単価×数量のような列の演算による計算項目)を定義することができる。
 物理テーブルの実態としては、物理フィールドと指定された列が生成される。
 導出項目は、XMLファイルの中に定義されている。
 導出項目の演算はJAVAスクリプトで自由に定義できる。
 このJAVAスクリプトには、スクリプト単位で8種の実行タイミングの指定ができる。
 実行タイミングは、読込前、追加前、更新前、削除前、読込後、追加後、更新後、削除後である。
 チェックボックスで、複数のタイミングを指定することができる。

3.拡張データタイプ
 物理テーブルを拡張するための、仮想的なテーブルへの情報がXMLで定義される。
 物理テーブルの定義に加えて、自動採番値、ユーザーがシステム内で利用する区分値、
 文字、数値の物理的タイプを拡張するような、漢字、半角カナ、郵便番号、電話番号他
 拡張データタイプを指定することで、データを操作するパネルが起動したときの、
 漢字入力や、入力フォーマットの指定が連携して実行される。


このシステムの重要な情報は
ヘルプファイルの概要と目次
「テーブル一覧」のノード群 
 C:\Program Files\Xead\Driver\help\Table.HTML
 が参考になります。


SalesOrosi.xeafを一通り触って、マスタやトランザクションテーブルに操作が反映されているのか。
集計や繰越が正しく働くのか、動作速度は問題ないか、一通り使ってみよう。


XEAD Driverには、サンプルシステムであるSalesOrosi.xeafのほかに、
独自のシステムを作成するプラットフォームとなるSkeleton.xeafが
用意されています。

ユーザーログイン管理、自動採番変数、ユーザ区分マスタ、複数ユーザの同時書き込みに対する
楽観的ロック等、手間のかかる部分がすでに構築されています。

楽観的ロックのため、テーブルには、UPDCOUNTERの列が隠し属性として存在します。
XeadEditorからは見えません。
メニューのツール -> SQLコンソールでは見ることができます。

参照
HATのブログhttp://ameblo.jp/hatsanhat/entry-10866855864.html
4.便利機能 3)排他制御


また、これらの機能がどのように実装されているのかソースを確認することで貴重な情報を得られます。

さて、プラットフォームは用意されたけど何から始めよう。
思いつくのは「模倣は創造の始まり」

大体の手順はつぎのとおり

1) C:\Program Files\Xead\Driver\Skeleton フォルダコピーし、
 フォルダ名、Skeleton.xeaf、Skeleton.xead、の名称を変更します。

2) SalesOrosi.xeafの取引先、顧客は三要素分析法の派生関係の例にあたります。
スーパータイプとなる取引先テーブルをコピーしてみよう。


3) サブタイプとなる顧客テーブルをコピーしてみよう。


4) 機能のAF030 XF100 明細一括表示、AF031 XF200 単票表示保守をコピーしてみよう。

5) メニュー一覧のマスターメニューにAF030を登録すればコーディングなしに
 取引先マスタの編集パネルが利用できるようになります。

6) 親子関係の見積見出し、見積明細などを順にSalesOrosiをコピーし移植することで、
 操作に慣れるかと思います。



XEAD Driverの特徴は、XMLを使用し仮想のデータベースを定義する。
仮想データベースを定義すれば、物理的なテーブルを自動構築し、同期することができる。
導出属性、継承属性、自動採番等のアプリケーションの基礎になる属性を「拡張データタイプ」
として定義することができる。

あらかじめ用意された拡張データタイプで実現できないような場合、JAVAスクリプトを記述し
スクリプトの起動タイミングを指定して、自由にプログラミングできる。
任意のタイミングで、主キーに対する導出属性、継承属性の関数従属性を
JAVAスクリプトで自由にプログラムことができます。

仮想データベースでは物理フィールドと、導出属性、継承属性のような
仮想フィールドを定義することができる。
当たり前の話だが、仮想データベースであっても属性は、
主キーに対する関数従属性を満たさすように実装しなければならない。
これは、JAVAスクリプトを記述する上での注意点です。
影響が他のテーブルにも及ぶ場合はそれらの部分もJAVAスクリプトで実装する必要があります。

赤黒伝票のような複雑な例が、GT020テーブル(出荷見出し)の
スクリプトNo.7、売上取消にともなう関連レコード処理(GF045B)にあります。


通常、アプリケーション側で記述する部分が、仮想テーブル側へ組み込むことが可能になります。
テーブル操作に関する記述も、シンプルで、JDBCやORMを意識する必要はありません。

XEAD Driverでプロトタイプのシステムを構築し、
顧客の要望が強く求められるよなパネル等を手作りするそんな使い方が効率良さそうです。

私がDOAに興味を持ち2年で、個人だけでは得られない知識、情報が得られたことを
Hatさん、渡辺さん、関西IT勉強宴会常連の皆さんに感謝します。

執筆活動の開始から10年の期間をかけてXEAD Driverをリリースされた渡辺さんの努力に
頭が下がります。

今年も皆さんお世話になりました。