SimpleModeler
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

SimpleModeler

on

  • 3,794 views

AppEngine Ja Night #4 at Ginza

AppEngine Ja Night #4 at Ginza

Statistics

Views

Total Views
3,794
Views on SlideShare
3,714
Embed Views
80

Actions

Likes
1
Downloads
35
Comments
0

3 Embeds 80

http://d.hatena.ne.jp 57
http://iteman.tumblr.com 15
http://www.slideshare.net 8

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

SimpleModeler Presentation Transcript

  • 1. クラウド・アプリケーション DSL駆動アプローチ SimpleModelerの試み 浅海智晴 edge2.cc 2010年1月22日
  • 2. 話題 SimpleModeler(+edge2.cc)で AppEngine Javaプログラム自動生成を 作っていて考えたこと クラウド・アプリケーション・アーキテクチャ オブジェクト・モデリングとクラウド・アプリケー ション DSL駆動開発とクラウド・アプリケーション
  • 3. 内容 SimpleModeler DSL駆動開発 SimpleModler&AppEngine
  • 4. SimpleModeler
  • 5. Agile Modegramming for Cloud クラウド プラットフォーム Agile Modegramming アジャイル開発 for Cloud モデル駆動開発 テキストDSL モデルコンパイラ オブジェクト モデリング
  • 6. SimpleModeler SimpleModel用モデル・コンパイラ テキストDSL Scala DSL Scala DSL&mavenによるモデル・リポジトリ Web仕様書、Java、Grails、Google App Engine Python/Javaを生成
  • 7. ターゲットのプラットフォーム Java .NET LAMP Cloud AppEngine/Java Windows Azure AppEngine/Pyth AppFabric on Web Spring, Seaser, Windows Server PHP, Ruby on Grails AppFabric Rails, Python Django Enterprise JavaEE(SOA) Windows Server N/A AppFabric
  • 8. SimpleModelerの動作 Web仕様書 project クラス図 html ステート CSV import マシーン図 java SimpleModelリポジトリ (Maven project) Javaプログラム convert grails Scala DSL Grailsプログラム import gae Mindmap (Xmind) Google App Engine/Python プログラム gaej verify testset import Google App Engine/Java gaeo プログラム Excel 検証結果 テストセット Google App Engine Oil プログラム 企画中
  • 9. SimpleModelerが生成するコード Web Controller/ Action/Template HTML Form JSP index.jsp EntityRepositoryService Servlet Dojoウィジェット index.jsp index.jsp DEACustomerController index.jsp <<document>> DDCustomer GwtCustomer DSYorozuEntity GWT RepositoryService GWT-RPC JDO index.html Servlet <<entity>> GwtYorozuEntity DEACustomer GWTCustomer RepositoryServiceImpl Editor JDO Atom AtomPub AtomPub Servlet AtomYorozuDomain Atomクライアント RepositoryServiceServlet DataStore HTML Form REST JSON Servlet Webブラウザ RESTYorozuDomain (JavaScript) RepositoryServiceServlet
  • 10. Scalaについて 純粋オブジェクト指向言語+本格関数型言語 関数型言語とクラウドは相性がよいはず 静的型付+型推論 Java VM上で動作 言語仕様が複雑 その代わり浅海の体感ではJavaの3倍ぐらいの生産性 がある DSLのホスト言語として充実した機能を持っている モデル・コンパイラの実装言語として充実した機能 を持っている
  • 11. 当面はScalaを DSLプラットフォーム 使用 Scala 状況によってXtext SimpleModelerで使用 またはOsloに移行 するかもしれない 内部DSL・外部DSL Xtext Eclipse Modeling Framework 外部DSL WebSphereと近しい関係にあると思われる Oslo Windows SQL Server Modeling 外部DSL AppFabricと統合されている
  • 12. DSL駆動開発
  • 13. DSL駆動開発とは テキストDSLを用いたモデル駆動開発 UMLをプログラミング言語的に用いることは間違いだっ た!? テキストDSLでモデルを記述 作成効率はテキストが圧倒的に効率的 必要に応じてUMLの図を生成 モデルの視認性はUMLが上 モデルをテキストで記述する テキストDSLの実現方法 モデルをデータとして 内部DSL:ホスト言語上に構築 操作して成果物を生成する 外部DSL:スクラッチで言語を作成
  • 14. PIM/PSM/実装 CIM : Computer Independent Model DSL PIM : Platform Independent Model CIM PIM PSM : Platform Specific Model DSL: Domain Specific Language DSL PSM 非機能要求 実装 プラットフォーム (Java、 XML、 …)
  • 15. モデル駆動開発&コンポーネント 分析 設計 実装 DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント DSL 自動生成 コンポーネント DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント
  • 16. フレームワーク vs 自動生成 アプリケーション アプリケーション DSL アプリケーション 自動生成 定義ファイル 定義ファイル フレームワーク フレームワーク Google App Engine Google App Engine フレームワーク 自動生成 アプローチ アプローチ
  • 17. DSL駆動開発で達成したいこと(1) プログラムの自動生成 契約 コンポーネントの自動生成 雛形の自動生成 One Source Multi Use (OSMU) AppEngine, Azure, JavaEE(SOA) モデルの再利用 アーキタイプ
  • 18. DSL駆動開発で達成したいこと(2) モデルの見える化 仕様書自動生成 マルチ・ビュー自動生成 追跡性(tracability) このユースケースで更新しているエンティティは何か このエンティティを更新しているユースケースは何か メトリクス モデル検証 テスト ユースケース→テスト・シナリオ 契約→コンポーネント・テスト プロジェクト管理の土台 ユースケース駆動 見積もり
  • 19. 考えないといけないこと UI 現実世界 (ドメイン・モデル) サービス ア ー データ 開発 キ ( 変換+ プログラミング) テ ク インテグレーション チ やりたいこと ャ イベント/リアクティブ (ユースケース・モデル) サービス・バス クラウド・アプリケーションも クラウド・アプリケーションの クラウド・アプリケーションの 記述できるPIM クラウドアプリケーションに クラウドアプリケーション 開発手法 クラウドアプリケーション アーキテクチャ・要素技術 対応した問題空間PIM 開発手法 解決空間PIM クラウドアプリケーション PSM PIM(Platform Independent Model) PSM(Platform Specific Model)
  • 20. クラウド・アプリケーション・アーキテクチャ 論理層の観点から サーバ側では、 GUIが使用する サービスを提供する。 クライアントはWebブラウザ上で 動作するHTML5で本格的なGUI プレゼンテーション層 を構築する。 クラウド・アプリケーション クライアント側 サーバ側 アプリケーションの論理的な構成は 従来のものと変わらない プレゼンテーション層 HTML5 サービス ビジネス層 ドメイン層 プレゼンテーション層はWeb指 統合層 アクセス方式1: RDBMS 向のMVC2ではなく、 クライアント ACID特性を要求されるデータはRDBMSに アクセス方式4: 手続き呼出し /サーバ時代のGUIに回帰する。 格納する。 性能特性、 障害特性がローカル の手続き呼び出しよりも脆弱 。 アクセス方式5: メッセージング 統合層 分散環境での連携に適応する特性をもつ。 RDBMS メッセージ・キュー アクセス方式2: KVS KVS 一般のデータはKVSに格納するのが望ましい 。 サービス REST サービス アクセス方式3:REST Webページを手繰って情報を取得する サービス
  • 21. クラウド・アプリケーション・アーキテクチャ の例 マスターデータなど更新頻度が低いデータは KVSで配布して直接参照する 。 結果を直接知りたい場合には 、 手続き呼 KVS び出しで同期型の連携を行う。 この形式の連携を行うとスケーラビリティが 低くなる。 プレゼンテーションの段階でできることをや っておくと 、 スケールアウトの効果によって クラウド・アプリケーション スケーラビリティが高まる 。 外部サービスからRESTを用いて情報を取 得するのが典型的な利用方法 。 サービス利用の主力はメッセージである 。 プレゼンテーション サービス サービス この形式の連携を行うとスケールアウトに よってスケーラビリティを確保できる。 サービス バックエンドのサービス群もメッセージによ メッセージ・キュー REST って連携 。 サービス メッセージ・キュー 同期通信 サービス メッセージ送信 メッセージ配信 KVS RDBMS データベースをアクセスするスコープは サービスに閉じておくのがよい 。 KVSとRDBMSを適材適所で使い分ける 。 可能であればKVSを使うのが望ましい 。
  • 22. 想定アーキテクチャ(最近考えていること) Web GUI UI Facade Service Component (HTML5) Service Reactive Framework Integration Framework Service Bus
  • 23. SimpleModelingの本
  • 24. オブジェクト・モデルの構成 状態機械モデル ステートマシーン図 ユースケースを現実化したものがコミュニケーショ ン図/シーケンス図、 コミュニケーション図/シーケン オブジェクト図/クラス ス図を利用者の視点によるシステムの利用事例と 図、 コミュニケーション して抽象化したものがユースケース 図/シーケンス図に登 場するオブジェクトの 状態遷移を記述 ユースケース図 コミュニケーション図 オブジェクト図 ユースケース (利用事例) クラス図をインスタンス 化(実体化)したものが オブジェクト図 コミュニケーション図を時間 軸の側面から記述したもの シーケンス図 クラス図 オブジェクト図上でコラ がシーケンス図 ボレーション(メッセー ジの送受信の集まり) を記述したものがコミュ ニケーション図 協調モデル 静的構造モデル
  • 25. SimpleModeling全体像 ドメイン・モデル 要求モデル システム・モデル 設計モデル 用語 事実 契約 自然言語 規則 契約 ユースケース 宣言モデル 拡張 静的モデル 利用 動的モデル 変換 コラボレーション コラボレーション 動的モデル 動的モデル アプリケ ーション・ 同期 機能モデル 変換 具体化 モデル サービス契約 静的モデル 静的モデル データフロー図 クラス図 クラス図 オブジェクト・ OCL 同期 操作 操作 モデル OCL OCL クラス図 クラス図 クラス図 静的モデル 変換 静的モデル 具体化 静的モデル ドメイン・ モデル 動的モデル 張 拡 化 体 具 ルール・モデル 宣言モデル 変換 宣言モデル ビジネス・ルール ビジネス・ルール
  • 26. SimpleModelingモデル変換 業務モデル ドメイン・モデル 要求モデル システム・モデル 設計モデル 実装 静的構造 エンティティ ドメイン層 ドメイン層 抽出 具体化 格納 現実世界 データベース ドメイン・モデル 抽出 コントロール アプリケーション層 アプリケーション層 ボキャブラリ 詳細化 実現 動的モデル 具体化 文脈 ユースケース 具体化 利用事例 バウンダリ プレゼンテーション層 プレゼンテーション層 操作 やりたいこと エンド・ユーザ アプリケーション・モデル
  • 27. クラウドの要件とモデリング技法 エンティティ・モデル データベース選択 データ種別 データ分割 ユースケース・モデル サービス分割 アクセス法解析 責務抽出 非同期処理 コラボレーション 顧客要求
  • 28. SimpleModelerでの対応方針 状態機械モデル DSLで記述。 ステートマシーン図 自動生成。 ユースケースを現実化したものがコミュニケーショ ン図/シーケンス図、 コミュニケーション図/シーケン オブジェクト図/クラス ス図を利用者の視点によるシステムの利用事例と 図、 コミュニケーション して抽象化したものがユースケース 図/シーケンス図に登 場するオブジェクトの 状態遷移を記述 ユースケース図 コミュニケーション図 オブジェクト図 ユースケース (利用事例) ユースケース、サービスをDSLで記述。 クラス図をインスタンス 化(実体化)したものが ユースケースからサービスまではモデル検証。 オブジェクト図 サービス契約からコンポーネントの 骨組みを自動生成。 コミュニケーション図を時間 軸の側面から記述したもの シーケンス図 クラス図 オブジェクト図上でコラ DSLで記述。 がシーケンス図 ボレーション(メッセー ジの送受信の集まり) を記述したものがコミュ ニケーション図 自動生成。 協調モデル 静的構造モデル
  • 29. One Source Multi Use PIM JavaEE Grails JAX-WS Ruby on Rails AppEngine Azure JAX-RS Python Django SCA … Service Bus Integration Framework (Data Flow?)
  • 30. SimpleModeler & AppEngine Java Web UI サービス エンティティ
  • 31. Web UI Web MVC→Web GUI HTML5/CSS3 REST/JSON GWT2 GWT-RPC HTML4/jQuery REST/JSON
  • 32. SimpleModeler & AppEngine/Java サービス
  • 33. サービス/コンポーネントの生成 完全自動生成 コンポーネント本体 実装 雛形生成 <<abstract>> サービス契約 <<abstract>> 外部リソース <<abstract>> プロトコル リソース コンポーネント本体 ファサード アダプタ 変化点 リソース <<abstract>> AtomPub JSON XML WS-* CSV アダプタ 外部リソース 変化責務 実装 変化責務 実装
  • 34. 動的モデルの記述と実装 手続き 関数(宣言) 状態機械 モデル サービスの挙動を モデルを作る 期待度大 適切なモデルで記述 のが難しい 変換は 変換! かなり難しい イベント 状態 イベント イベント 状態 状態 実行時は 状態機械 ガード 状態機械 ガード 状態機械 ガード 状態機械ベースの リアクティブシステム アクション アクション アクション 実装
  • 35. SimpleModeler & AppEngine/Java エンティティ
  • 36. SimpleModelerが生成するレコード 共通属性 作成日時、更新日時 論理更新、楽観ロックなど AtomPub 自己記述的 スキーマバージョン スキーマエボリューション スキーマメタデータ レコードのメタデータをインスタンスごとに持つ 更新ログ 論理更新、論理削除 append-only AtomPubフィールド対応
  • 37. メタ・モデル <<usecase>> UseCase <<service>> Usage <<actor>> <<event>> <<resource>> Actor Event Resource <<service>> <<powertype>> Service Powertype <<rule>> Rule
  • 38. メタ・モデルのインスタンス サ ビ ・シ テ 外 ー ス ス ム ア ター 務 ス ム 物 ク と業 シ テ の 語 に る ブ ェクト あ オ ジ イ ン 参 す ア ター ベ トに 加 る ク サ ビ ・シ テ が 理 ー ス ス ム 管 して る ブ ェクト い オ ジ 業 ユ ス ー の ー 中 務 ー ケ ス フロ の で 業 タス 実 に って 務 クの 行 よ ドメイン サ ビ ・シ テ と対 す ス ップ ー ス ス ム 話 る テ イ ン 発 す ベ トが 生 る アクター 登 人 場 物 業 ユ ス ー 務 ー ケ ス 業 タス ア 務 クを クターと 道具 サ ビ ・シ テ の 話 ー ス ス ム 対 として 体 具 化 脚本 リソース 業 タス 務 ク イ ン ベ ト 状 機 態 械 出 事 来 物語 イ ン よて 態 ベ トに っ 状 が シ テ ・ユ ス ー ス ム ー ケ ス 遷 す 移 る シ テ ・タス ス ム ク サ ビ ー ス サ ビ ・シ テ 上 ース ス ム イベ トに って 新 照 ン よ 更 (+参 ) で 生 るベ ト 発 す イ ン され リソ ス る ー アクター ー ス ス ム 物 とサ ビ ・シ テ の 語
  • 39. 関連 <<aggregate>> 関連の種類 関連(association) 集約 (aggregation) 合成 (composition) whole-partの合成 多重度 1, 0..1(?), 1..N(+), 0..N(*) DataStore Id Key, String, Long 物理ID、論理ID エンティティ参照 物理ID、論理ID 自動採番、手動採番 物理更新、論理更新 物理削除、論理削除 <<part>> unary、binary リンク参照、Query参照 キャッシュ有無 トランザクション 気にしない、BASE、ACID
  • 40. EntityとValue Object(document) 間の転記 <<document>> DD顧客購入依頼文書 <<actor>> 日時: DateTime DEA顧客 顧客番号: DVI顧客番号 <<event>> 顧客番号: DVI顧客番号 商品番号: DVI商品番号 DEE顧客購入 顧客名: PartyName 1...N 価格: Money 顧客取引番号: DVI顧客取引番号 個数: XUnsignedInt 日時: DateTime 顧客番号: DVI顧客番号 <<item>> DEI顧客購入商品明細 <<document>> DD顧客購入結果文書 顧客取引番号: DVI顧客取引番号 <<actor>> 顧客取引番号: DVI顧客取引番号 商品番号: DVI商品番号 DER商品 日時: DateTime 明細番号: ItemNo 商品番号: DVI商品番号 顧客番号: DVI顧客番号 価格: Money 商品名: DVN商品名 顧客名: PartyName 個数: XUnsignedInt 在庫数: XUnsignedInt 商品番号: DVI商品番号 商品名: DVN商品名 1...N 価格: Money 個数: XUnsignedInt
  • 41. 同期write + 非同期ログwrite + 管理情報cache /customer/c11/update-async?name=ABC_Taro アプリケーション ② Web ① Customer (Servlet) ブラウザ ⑤ ④ ③ TaskQueue ⑥ /_system/event/log アプリケーション 処理結果 (Servlet) ログ ⑦ memcache ⑨ /_system/flush ⑩ アプリケーション Customer Cron ⑧ (Servlet) 管理情報
  • 42. 非同期write /customer/c11/update-async?name=ABC_Taro アプリケーション Web ① (Servlet) ブラウザ ③ ② TaskQueue ④ ⑤ Customer /customer/c11/update?name=ABC_Taro アプリケーション (Servlet) ⑦ 処理結果 ⑥ ログ memcache ⑨ /_system/flush ⑩ アプリケーション Customer Cron ⑧ (Servlet) 管理情報
  • 43. powertype/区分コード <<actor>> <<powertype>> DEA顧客 DP料金区分 無料 エントリ プロフェッショナル DD顧客 DEA顧客 DP料金区分 ID 12345 ID 12345 ID 料金区分名 updated 名前 山田太郎 名前 山田太郎 1 無料 2008-10-10 料金区分 3 料金区分 3 2 エントリ 2008-10-10 料金区分 料金区分 プロ プロ 3 プロフェッショナル 2009-05-05 _料金区分名 _料金区分名 料金区分 2009-03-03 _updated
  • 44. モデルとレコード 1..* <<actor>> <<event>> <<part>> <<resource>> DEA注文 DEE注文 DEP注文詳細 DER商品 DEA顧客 DEE注文 DER商品 ID 12345 ID 1234567 ID 商品_名前 価格 updated 名前 山田太郎 発効日 山田太郎 135 みかん 100 2009-05-05 updated 2009-03-03 顧客 23456 246 りんご 80 2009-05-05 顧客_名前 山田太郎 369 ぶどう 120 2009-05-05 DEP注文詳細 ID 商品 商品_名前 価格 個数 1 135 みかん 100 5 注文詳細 2 246 りんご 80 3 3 369 ぶどう 120 8 updated 2009-09-09
  • 45. スキーマ・エボリューション(課題) スキーマ V1 スキーマ V2 スキーマ V3 生成 スキーマ V1 スキーマ V1 レコード ハンドラ スキーマ V3 スキーマ V2 スキーマ V2 エンティティ ハンドラ レコード アプリケーション スキーマ V3 ハンドラ スキーマ V3 レコード
  • 46. まとめ クラウド・アプリケーションはイベント駆動アーキテク チャのリアクティブシステムと想定。 クラウド・アプリケーションをDSL駆動で開発するた めには、クラウド・アプリケーションを記述できるメ タ・モデルとDSL文法が必要。 静的構造モデルと状態機械モデルはモデルから自 動生成ができる。一方、ユースケースモデルからは 自動生成できないので工夫が必要。 SimpleModeler&AppEngineで色々と試してみ た感触では、相当のことができそうな気がしている。
  • 47. おまけ:SimpleModelerデモ
  • 48. 諸元 SimpleModeler 0.1.5 Grails 1.0.4 Google App Engine/Python 1.1.9 Eoogle App Engine/Java 1.2.0 Google Web Toolkit 1.6.4 Eclipse 3.4 Java EE Developers + Google App Engine Plugin
  • 49. デモ手順 Groovy/Spring/Hibernate Grails CSV ③ Google App Engine Python/Django/Dojo Toolkit Python SimpleModel リポジトリ ④ Java/JDO/ ① Scala Google App Engine Servlet/JSP/Dojo Toolkit DSL ⑤ Java マインドマップ ② Google App Engine Java/JDO/Google Web Toolkit Java Google Web Toolkit ⑥ クラス図/ステートマシーン図/ 状態遷移表 Web仕様書
  • 50. CSVとクラス図 demo.csv #actor,parts,attrs customer,,phone #resource goods,,note #event buy,customer;goods
  • 51. SimpleModelerデモ ①CSV→マインドマップ $ simplemodeler –convert demo.csv
  • 52. SimpleModelerデモ マインドマップ
  • 53. SimpleModelerデモ ②マインドマップ→Scala DSL(SimpleModelリポジトリ) $ simplemodeler –project demo $ cd demo $ simplemodeler –import ../demo.csv –import.package:com.demo $ mvn compile
  • 54. SimpleModelerデモ ③Scala DSL→Grails $ grails create-app grailsdemo $ simplemodeler –grails com.demo – output:grailsdemo $ cd grailsdemo $ grails generate-all com.demo.DeeBuy $ grails generate-all com.demo.DeaCustomer $ grails generate-all com.demo.DerGoods $ grails run-app
  • 55. SimpleModelerデモ Grails
  • 56. SimpleModelerデモ ④Scala DSL→Google App Engine/Python $ simplemodeler –gae com.demo – gae.project:simplemodelerdemo – output:gae $ dev_appserver.py gae $ cd gae $ cd appcfg.py update simplemodelerdemo
  • 57. SimpleModelerデモ Google App Engine/Python
  • 58. SimpleModelerデモ ⑤Scala DSL→Google App Engine/Java [Eclipse]gaejプロジェクト作成 $ simplemodeler –gaej com.demo – gaej.project:simplemodelerdemo – gaej.gwt –output:../gaej [Eclipse]リフレッシュ [Eclipse]Gaejプロジェクト起動 [Eclipse]Googleアップロード
  • 59. SimpleModelerデモ Google App Engine/Java Servlet/JSP/Dojo Toolkit
  • 60. SimpleModelerデモ Google App Engine/Java Google Web Toolkit
  • 61. SimpleModelerデモ ⑥CSV→マインドマップ→Scala DSL→Web仕様書 $ simplemodeler –convert yorozu.csv $ simplemodeler –project yorozu $ cd yorozu $ simplemodeler – import ../yorozu.csv $ mvn compile $ simplemodeler –html com.yorozu – output:target/html.d
  • 62. SimpleModelerデモ CSVで記述できること yorozu.csv #actor,base,parts,attrs,powers,states,roles 顧客,,,住所 個人顧客,顧客,,,性別(男性;女性) 法人顧客,顧客 従業員,,,,,,店員 #role 店員 #resource 商品,,製品+,,,商品状態(入荷待;在庫中;配送中;販売完) 製品 #event 顧客取引,,顧客;店員 顧客購入,顧客取引,商品+
  • 63. SimpleModelerデモ マインドマップ(XMind)
  • 64. SimpleModelerデモ Scala DSL package com.yorozu import org.simplemodeling.dsl._ import org.simplemodeling.dsl.datatype._ import org.simplemodeling.dsl.domain._ import org.simplemodeling.dsl.domain.values._ case class DER製品 extends DomainResource { term = "製品" caption = "製品" brief = <t></t> description = <text></text> id("製品Id", DVI製品Id()) attribute("製品Name", DVN製品Name()) } case class DVI製品Id extends DomainValueId { term = "製品Id" caption = "製品Id" brief = <t></t> description = <text></text> attribute("value", XString) } case class DVN製品Name extends DomainValueName { term = "製品Name" caption = "製品Name" brief = <t></t> description = <text></text> attribute("value", XString) }
  • 65. SimpleModelerデモ Web仕様書
  • 66. SimpleModelerデモ クラス図
  • 67. SimpleModelerデモ Scala DSL→ステートマシーン図 package com.yorozu case class DMS入荷待 extends DomainState { import org.simplemodeling.dsl._ term = "入荷待" import org.simplemodeling.dsl.datatype._ caption = "入荷待" import org.simplemodeling.dsl.domain._ brief = <t></t> import org.simplemodeling.dsl.domain.values._ description = <text></text> case class DER商品 extends DomainResource { transition(DEE商品入荷(), DMS在庫中()) term = "商品" } caption = "商品" brief = <t></t> case class DMS在庫中 extends DomainState { description = <text></text> term = "在庫中" caption = "在庫中" id("商品Id", DVI商品Id()) brief = <t></t> attribute("商品Name", DVN商品Name()) description = <text></text> association("製品", DER製品(), OneMore) statemachine(DM商品状態()) transition(DEE顧客購入(), DMS配送中()) } transition(DEE顧客購入(), DMS販売完()) } ・・・中略・・・ case class DM商品状態 extends DomainStateMachine { case class DMS配送中 extends DomainState { term = "商品状態" term = "配送中" caption = "商品状態" caption = "配送中" brief = <t></t> brief = <t></t> description = <text></text> description = <text></text> state(DMS入荷待()) transition(DEE商品配送(), DMS販売完()) state(DMS在庫中()) } state(DMS配送中()) state(DMS販売完()) case class DMS販売完 extends DomainState { } term = "販売完" caption = "販売完" brief = <t></t> description = <text></text> }
  • 68. SimpleModelerデモ ステートマシーン図と状態遷移表