2008年12月24日水曜日

状態機械

パワータイプと状態機械をScala DSLで記述する方法について試行錯誤しつつ実装。

ユースケースによって発生するドメイン・イベントとドメイン・リソースの状態機械を有機的に結びつけることができそうな感触を得た。このあたりは 汎用性を目指すUMLでは、利用者に任されているところなのだけれど、使い方をよほど真剣に考えないと実運用に適用できるレベルで具体化できないので、結 局使われないままになってしまうという結果になっていると思われる。この点をモデリング手法で定型化することで、一般で利用可能にすることが SimpleModelingの狙いの一つである。

実装を続けながら、アプリケーション開発では状態機械の置き場所が一つの論点であることに気付く。
ドメインオブジェクトの状態機械で色々なアクションを行うようにすると、ドメイン・モデルとアプリケーション・モデルが好ましくない方向で密結合 になってしまう。アプリケーション・モデルはドメイン・モデルに依存するけれども、ドメイン・モデルはアプリケーション・モデルから独立させたい。
ドメイン・モデルの状態機械で色々なことを始めると、最終的に業務プロセスの作業手順をドメイン・モデルが抱え込むことになってしまう。
この問題を解決するためには、ドメイン・オブジェクトの状態機械にアプリケーション・モデルの状態機械をかぶせるような実現方法が必要になってくるかもしれない。そういったプログラムを自動生成するには...などとつらつら考える。

2008年12月16日火曜日

業務ユースケースのextend

このところ業務ユースケースのextendの実装を続けている。今朝、なんとか疎通した。 ちょっとした勘違いで数日デバッグに費やす。プログラミングはどれだけデバッグに耐えられるかという耐性によるところが大きい。

ユースケースを扱うツールを書いてみるとよく分かるけれど、ユースケースを準形式的に書くために意識しなければならない点は多い。こういった点まで網羅した参考書は見かけたことがなく、今の専らの参考書は『The Unified Modeling Language Reference Manual 2nd』である。ここに定義しているUMLのメタ・モデルをどのようにDSLで表現するのか、という作業を続けているともいえる。

2008年12月11日木曜日

業務ユースケースフロー

SimpleModelerは業務ユースケースのフローを扱う処理を開発中。 既存の手法だと、フローは自然文で書いて後は目視のみなので、実運用上開発に必要な情報量を記述することが困難。 実際にユースケースのフローを扱う処理を書いているとかなりややっこしいことが分かる。こういうややっこしいことを手作業で開発者に強いるのは、まず機能しない。 やはり、定型フォーマットに会わせて書いた物をツールで検証しかない。


2008年12月7日日曜日

業務ユースケース

現在は業務ユースケースの実装を行っている。その中で特にScala DSLでフローを記述する手法を試行錯誤中。

task("商品を購入する") {
step_client_worker_system(DS顧客購入().operation("顧客購入")) {
event_issue(DEE顧客購入()) {
resource_update(DER商品())
}
} mark_is "buy3"
}

という定義から:

というフローを生成できる所まできた。
次の課題は、(1)ユースケース間の関係と(2)エンティティの状態遷移の2つをどのように取り込むのかである。

2008年12月5日金曜日

TODO

この間の日曜日(11/30)にBeProudさんのモデル駆動勉強会でSimpleModeling/SimpleModelerの紹介をしてきました。とてもよいフィードバックを得られて感謝です。

以下、その中ででたコメントから、SimpleModelerでサポートするとよいと思われる機能をメモしておきます。
  • 既存のデータベースからのリバース
  • UML図の自動生成
また、懸念事項として、モデルと生成したソースコードのずれの問題が挙がりました。これは、11/14のUMTPでのセッションでも挙げられた問題で、モデルコンパイラのお話しをすると必ずされる質問です。

これについてはプログラマ日記にSimpleModelerの方針を書きました。

2008年11月7日金曜日

実現したい機能

SimpleModelerを実現するための基礎工事が一定の地点まで到達し、基本機能の疎通もできたので0.1としてリリースしました。
現在できるのはSimpleModelのドメイン・モデルからJavaクラスとWeb仕様書の生成です。
ただ、JavaクラスはPOJOレベルの単純なものなので、Factory機能や永続化などの機能の自動生成まで行うことを予定しています。『Domain Driven Design』の技術はかなりパターン化されているので、これを自動生成するのが目標です。
Web仕様書は、DSL(Domain Specific Language)で記述したことをYUI(Yahoo UI)を使ってきれいに表示できるようにしたレベルです。ただし、オブジェクトが誰にどのように利用されているのかという情報を「参加」という項目で記述しています。
単に、DSLに記述したことを字句上で変換するだけではなくて、モデルの内容を解析したうえで、プログラマが関心をもつ色々な切り口の情報を記述していくのが目標です。たとえば、ユースケースを実行するとイベントの発生やリソースの状態遷移が起こりますが、逆にイベントやリソースの立場では、どのユースケースに参加する時に自分が生成されたり、状態が変えられたりするのかという点を知りたくなります。こういった情報をツールで抽出することがSimpleModelerに持たせたい機能の一つです。

2008年11月5日水曜日

SimpleModeler 0.1

SimpleModelerは、ScalaベースのDSLで記述したSimpleModelingのモデル体系であるSimpleModelからJavaプログラムや仕様書を生成するためのモデル・コンパイラです。
開発も端緒についたばかりで、実用に利用するにはまだまだ機能不足ですが、最初の第一歩ということで公開します。

SimpleModelerのホームページは以下のURLです。


SimpleModeler 0.1は以下のページからダウンロードできます。ソースコードはSubversionからチェックアウトすることができます。


[セットアップ方法]

上記のURLからsimplemodeler-0.1-setup.jarをダウンロードします。
このインストールプログラムを以下のように起動します。
$ java -jar simplemodeler-0.1-setup.jar 

インストールディレクトリを聞いてきますので入力します。 デフォルト値で良い場合にはそのままリターンを押下します。

Install directory [default: C:\usr\local\lib\simplemodeler]:  

コマンドスクリプトのインストールディレクトリを聞いてきますので入力しま す。 デフォルト値で良い場合にはそのままリターンを押下します。 このディレクトリには実行パスが通っている必要があります。(インストール 後に設定しても可)

Command directory [default: C:\usr\local\bin]:  

以下のように設定の確認をしてくるので良ければ"yes"を入力しま す。

[Configuration] Install directory = c:\usr\local\lib\simplemodeler Command directory = c:\usr\local\bin  Type yes to install, no to re-enter, exit to exit Type yes:  

以下のようにインストールが実行されます。

この例はWindows上での実行例でCommand.com用のBATファイルとCygwin用のシェ ルスクリプトが生成されています。

Extract archives... Generate script...   script = c:\usr\local\bin\simplemodeler.bat   script = c:\usr\local\bin\simplemodeler Done. 

UNIXの場合には、生成されたスクリプトに実行権がついている必要があります。 chmodコマンドを使って実行権を付加してください。

これでインストールは終了です。 スクリプトのインストールディレクトリにパスが通っていればすぐにでも実行 を行なうことができます。

以下のように実行できればインストール完了です。

$ simplemodeler -version Copyright(c) 2008 ASAMI, Tomoharu. All rights reserved. SimpleModeler Version 0.1 (20081105) 

examples/com.yorozuにサンプルがあるので参照してください。