パワータイプと状態機械をScala DSLで記述する方法について試行錯誤しつつ実装。
ユースケースによって発生するドメイン・イベントとドメイン・リソースの状態機械を有機的に結びつけることができそうな感触を得た。このあたりは 汎用性を目指すUMLでは、利用者に任されているところなのだけれど、使い方をよほど真剣に考えないと実運用に適用できるレベルで具体化できないので、結 局使われないままになってしまうという結果になっていると思われる。この点をモデリング手法で定型化することで、一般で利用可能にすることが SimpleModelingの狙いの一つである。
実装を続けながら、アプリケーション開発では状態機械の置き場所が一つの論点であることに気付く。
ドメインオブジェクトの状態機械で色々なアクションを行うようにすると、ドメイン・モデルとアプリケーション・モデルが好ましくない方向で密結合 になってしまう。アプリケーション・モデルはドメイン・モデルに依存するけれども、ドメイン・モデルはアプリケーション・モデルから独立させたい。
ドメイン・モデルの状態機械で色々なことを始めると、最終的に業務プロセスの作業手順をドメイン・モデルが抱え込むことになってしまう。
この問題を解決するためには、ドメイン・オブジェクトの状態機械にアプリケーション・モデルの状態機械をかぶせるような実現方法が必要になってくるかもしれない。そういったプログラムを自動生成するには...などとつらつら考える。
2008年12月16日火曜日
業務ユースケースのextend
このところ業務ユースケースのextendの実装を続けている。今朝、なんとか疎通した。 ちょっとした勘違いで数日デバッグに費やす。プログラミングはどれだけデバッグに耐えられるかという耐性によるところが大きい。
ユースケースを扱うツールを書いてみるとよく分かるけれど、ユースケースを準形式的に書くために意識しなければならない点は多い。こういった点まで網羅した参考書は見かけたことがなく、今の専らの参考書は『The Unified Modeling Language Reference Manual 2nd』である。ここに定義しているUMLのメタ・モデルをどのようにDSLで表現するのか、という作業を続けているともいえる。
ユースケースを扱うツールを書いてみるとよく分かるけれど、ユースケースを準形式的に書くために意識しなければならない点は多い。こういった点まで網羅した参考書は見かけたことがなく、今の専らの参考書は『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つをどのように取り込むのかである。
task("商品を購入する") {
step_client_worker_system(DS顧客購入().operation("顧客購入")) {
event_issue(DEE顧客購入()) {
resource_update(DER商品())
}
} mark_is "buy3"
}
という定義から:
- 14 顧客は顧客担当者に商品購入依頼文書で顧客購入を依頼する。
- 15 顧客担当者はよろず販売システムに商品購入依頼文書で顧客購入を依頼する。
- 16 よろず販売システムは顧客購入の発行を実行する。
- 17 よろず販売システムは商品の更新を実行する。
- 18 よろず販売システムは顧客担当者に商品購入結果文書で顧客購入の結果を返す。
- 19 顧客担当者は顧客に商品購入結果文書で顧客購入の結果を返す。
次の課題は、(1)ユースケース間の関係と(2)エンティティの状態遷移の2つをどのように取り込むのかである。
2008年12月5日金曜日
TODO
この間の日曜日(11/30)にBeProudさんのモデル駆動勉強会でSimpleModeling/SimpleModelerの紹介をしてきました。とてもよいフィードバックを得られて感謝です。
以下、その中ででたコメントから、SimpleModelerでサポートするとよいと思われる機能をメモしておきます。
これについてはプログラマ日記にSimpleModelerの方針を書きました。
以下、その中ででたコメントから、SimpleModelerでサポートするとよいと思われる機能をメモしておきます。
- 既存のデータベースからのリバース
- UML図の自動生成
これについてはプログラマ日記に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にサンプルがあるので参照してください。
登録:
投稿 (Atom)