Your SlideShare is downloading. ×
0
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
EMF勉強会
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

EMF勉強会

1,437

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,437
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Eclipse Modeling Project による MDA の実践 ©Actier, Inc. All rights reserved.
  • 2. 自己紹介 名前 : 大島則人 所属 : 株式会社アクティア 代表取締役社長 URL : http://www.actier.co.jp 技術領域 Java アーキテクト モデル駆動型ソフトウェア開発 ©Actier, Inc. All rights reserved.
  • 3. なぜモデル駆動型ソフトウェア開発なのか?動かないモデルはただのスケッチだ! ©Actier, Inc. All rights reserved.
  • 4. 本日のアジェンダ MDA (Model-Driven Architecture) とは? Eclipse Modeling Project の活用  ATL (ATLAS Transformation Language) の利用  Acceleo の利用 まとめ ©Actier, Inc. All rights reserved.
  • 5. MDA とは?©Actier, Inc. All rights reserved.
  • 6. MDA とは? Wikipedia によると…  アーキテクチャから設計を分離し、設計とアー キテクチャがそれぞれ独立して変更できるよう な技術を確立するということ…(一部抜粋)  実装技術やソフトウェアアーキテクチャが変化 しても、機能的要求仕様の概念設計が依然とし て利用可能となることを意図している…(一部 抜粋) ©Actier, Inc. All rights reserved.
  • 7. アーキテクチャと設計の分離 やりたいこと(設計) 注文 注文を登録する 顧客 顧客を検索する Java Tomcat エンジニアWebブラウ httpd Struts/Java ザ RDBMS 実現手段(アーキテクチャ) ©Actier, Inc. All rights reserved.
  • 8. 新しいアーキテクチャへの対応 やりたいこと(設計) 注文 注文を登録する 顧客 顧客を検索する Scala エンジニアWeb Play/Scalaブラウ httpd ザ(JQuery) KVS 実現手段(アーキテクチャ) ©Actier, Inc. All rights reserved.
  • 9. 概念設計が依然として利用可能 やりたいこと(設計)のライフサイクルは長い 実現手段(アーキテクチャ)のライフサイクルは短 い 新規開発よりも長年保守しているシステム  アーキテクチャが古くなる  機能追加や仕様変更も古い技術に頼る 全部新しい技術で作り直しは現実的でな い! ©Actier, Inc. All rights reserved.
  • 10. MDA が目指すもの やりたいこと(設計) 注文 注文を登録する 顧客 顧客を検索する Java Generator TomcatWebブラウ httpd Struts/Java ザ RDBMS 実現手段(アーキテクチャ) ©Actier, Inc. All rights reserved.
  • 11. 技術の変化に合わせて やりたいこと(設計) 注文 注文を登録する 顧客 顧客を検索する Scala モデル(設計)をコンパイル可能とすること GeneratorWeb Play/Scalaブラウ httpd ザ(JQuery) KVS 実現手段(アーキテクチャ) ©Actier, Inc. All rights reserved.
  • 12. モデルから成果物ができるまで やりたいこと 実現手段の中間モデル(PIM:Platform Independent Model) (PSM:Platform Specification Model) ICustomer 顧客 モデル 変換 Customer テキス ト変換 実現手段の成果物 モデルコンパイラによる自動化 public interface ICustomer { } public class Customer implements ICustomer { } ©Actier, Inc. All rights reserved.
  • 13. 何に対して独立か? Platform Independent Model  何を Platform と定めるか特に規程が無い… MDA が定めるモデルの役割  Computate Independent Model コンピュータ独立モデル(PIM の上位モデル)  Platform Independent Model プラットフォーム独立モデル  Platform Specification Model プラットフォーム特化モデル PIM はコンピュータを使って実現できるレベルのモデルということでも、言語や実行環境、OS、フレームワーク に依存しないレベルという 理解 → DAO とか DTO レベルのモデルは作るべし! ©Actier, Inc. All rights reserved.
  • 14. そもそもモデルって? またまた Wikipedia…  物ごとを説明するための枠組み(一部抜粋)  幾何学的な図形を用いた概念や物体を用いた理 論(一部抜粋) オブジェクトモデルは… 識別子があって、属性があって、操作、関連がある UML クラス図はモデルの表現手段(見せ方)の一種でしかない ©Actier, Inc. All rights reserved.
  • 15. MDA が定めるモデル MOF メタメタモデル定義 (Meta Object Facility) UML CWM メタモデル定義(Unified Modeling Language) (Common Wharehouse Metamodel) UML Instance CWM Instance モデル定義MOF によって定義されるメタモデルを持つモデルを MDA ではモデルとして扱う→ XMI (XML Metadata Interchange) により XML で表現できる! ©Actier, Inc. All rights reserved.
  • 16. つまり MDA とは MOFで定義されたモデルをモデル変換、テ キスト変換を使って実現手段となる成果物を 自動生成する仕組みのガイドライン モデルから実現手段となる成果物を自動生成 するモデル駆動型開発のガイドライン (UML)モデルから実現手段となる(Java ) コードを自動生成するモデル駆動型開発を実 現する ©Actier, Inc. All rights reserved.
  • 17. Eclipse Modeling Project の活用 ©Actier, Inc. All rights reserved.
  • 18. Eclipse Modeling Project の活用 言うまでもなく、オープンソース Eclipse Modeling Framework  EMF 対応のモデル駆動型開発ツールの存在 Eclipse Modeling Tools Platform  モデル駆動型開発プラットフォームの提供  M2M プロジェクト  M2T プロジェクト  無料で使える! ©Actier, Inc. All rights reserved.
  • 19. M2M (Model To Model) Project モデル駆動型開発のモデル変換部分を提供  ATL (Atlas Transformation Language)  Operational QVT  Declarative QVT OMG 標準は QVTo / QVTd  サンプルやドキュメントが見当たらない (極めて少ない) ATL は QVT Like  サンプルやドキュメントが多く実績ありそう ©Actier, Inc. All rights reserved.
  • 20. M2T (Model To Text) Project モデル駆動型開発のテキスト変換部分を提供  JET  Acceleo  Xpand OMG 標準は Acceleo  フランスの Obeo 社で開発、実績共に問題なさそう JET / Xpand は EMF 独自?  テンプレートの書式が違うだけでテキスト変換は可能 ©Actier, Inc. All rights reserved.
  • 21. ATL の利用©Actier, Inc. All rights reserved.
  • 22. ATL Concepts ©Actier, Inc. All rights reserved.
  • 23. もう少し分かり易く… Ecore は MOF の EMF 実装 UML CWM 変換プログラ ムUMLモデル CWMモデル UML 独自メタモデ ル 変換プログラ ム UMLモデル 独自モデル ©Actier, Inc. All rights reserved.
  • 24. 弊社のアプローチ案ステレオタイプ ステレオタイプ タグ付き値 タグ付き値 UML UML UML UMLProfile(PIM) Profile(PSM) 変換プログラ ム UMLモデル UMLモデル ステレオタイプとタグ付き値の変換で実現 ©Actier, Inc. All rights reserved.
  • 25. ATL による変換例 PIM rule Entity { from <<entity>> source : UML2!Class (source.isEntity()) 商品 <<entity>> to {name = 商品 } “item” target : UML2!Class( {name = “item” } name <- source.name2java() , -<<identity>>商品ID : 文字列 {name = “item_id”} -<<name>>商品名 : 文字列 {name = “item_name”} -<<identity>>商品ID : 文字列 {name = “item_id”} ownedAttributes <- source.ownedAttributes -<<name>>商品名 : 文字列 {name = “item_name”} ) do { // 後処理 } } rule Property { from source : UML2!Property PSM to target : UML2!Property ( <<jpaEntity>> name <- source.name2java().toLowerFirst(), <<jpaEntity>> Item {tablename = “item”, doc=“商品”} Item type <- source.type2java() {tablename = “item”, doc=“商品”} )-<<id>>itemId : String {col =“item_id”, doc=“商品ID”}-<<column>>itemName : String {col =“item_name”, doc=“商品名”} do { -<<id>>itemId : String {col =“item_id”, doc=“商品ID”} -<<column>>itemName : String {col =“item_name”, doc=“商品名”} // 後処理 } } ©Actier, Inc. All rights reserved.
  • 26. PSM で表現されるもの フレームワークが求める継承関係を構築  Struts の ActionForm を継承する… フレームワークが求めるインタフェースを構 築  Spring 等の DI コンテナが求めるインタフェース … ステレオタイプ/タグ付き値  JavaDocに埋め込みたい情報 例)PIM の設計情報…  Javaクラスの annotation 情報 例)JPA の annotaion ( Entity / Table / Column…) ©Actier, Inc. All rights reserved.
  • 27. Acceleo の利用 ©Actier, Inc. All rights reserved.
  • 28. Acceleo の概要 User テキスト変換言語-userId : String [public template genClass(aClass : Class)]-userName : String public class [aClass.name/] { [for (p : Property | aClass.ownedAttributes)] private [p.type.name/] [p.name/]; Item [/for] }-itemId : String [/template]-itemName : String public class User { public class Item { private String userId; private String itemId; private String userName; private String itemName; } } ©Actier, Inc. All rights reserved.
  • 29. Acceleo による変換 create table item ( item_id varchar(255) not null primary key, <<jpaEntity>> item_name varchar(255) not null Item ); {tablename = “item”, doc=“商品”}-<<id>>itemId : String {col =“item_id”, doc=“商品ID”}-<<column>>itemName : String {col =“item_name”, doc=“商品名”} @Entity @Table(name = “item”) public class Item { @Id(name = “item_id”) private String itemId; @Column(name = “item_name”) private String itemName; ); <<daoInterface>> public interface ItemDao { ItemDao public Item findById(String itemId); {doc=“商品DAO”} );+findById(itemId : String) : Item {doc = “商品IDで検索する”} public abstract class ItemDaoBase implements ItemDao { @PersistenceContext <<dao>> private EntityManager entityManager; ItemDaoBase public EntityManager getEntityManager() { {doc=“商品DAO”} return entityManager;-entityManager : EntityManager {readonly} }+findById(itemId : String) : Item {doc = “商品IDで検索する”} ); ©Actier, Inc. All rights reserved.
  • 30. 実際のビジネスロジックはどうするか? サブクラス化が困難な場合は Hook Operation パターンを利用して委譲する @Entity <<jpaEntity>> @Table(name = “user”) User public class User { -<<id>>userId : String @Id(name = “user_id”) -<<column>>password : String private String userId; +<<operation>>authenticate(password : String) : Boolean @Column(name = “password”) private String password; @Transient private UserOperation ope; <<businessRule>> public Boolean authenticate(String password) { UserOperation return ope.authenticate(); } ); +<<operation>>authenticate(password : String) : Boolean public class UserOperationImpl implements UserOperation {public interface UserOperation { @Override public Boolean authenticate(String password); public Boolean authenticate(String password) {); return user.getPassword().equals(password); } ); UserOperationImpl は自動生成しない ©Actier, Inc. All rights reserved.
  • 31. 実際のビジネスロジックはどうするか? サブクラス化が可能な場合は Generation Gap パターンを利用して継承する <<daoInterface>> public interface ItemDao { ItemDao public Item findById(String itemId); {doc=“商品DAO”} );+findById(itemId : String) : Item {doc = “商品IDで検索する”} public abstract class ItemDaoBase implements ItemDao { @PersistenceContext <<dao>> private EntityManager entityManager; ItemDaoBase public EntityManager getEntityManager() { {doc=“商品DAO”} return entityManager;-entityManager : EntityManager {readonly} }+findById(itemId : String) : Item {doc = “商品IDで検索する”} ); public class ItemDaoImpl extends ItemDaoBase { @Override public Item findById(String itemId) { return getEntityManager().find(Item.class, itemId); } ); ItemDaoImpl は自動生成しない ©Actier, Inc. All rights reserved.
  • 32. 繰り返し型開発に耐える やりたいこと 実現手段の中間モデル(PIM:Platform Independent Model) (PSM:Platform Specification Model) ICustomer 顧客 モデル 変換 Customer テキス ト変換 実現手段の実装 実現手段の成果物 (上書きされない) public interface ICustomer { public class CustomerImpl } extends Customer { } public class Customer implements ICustomer { } ©Actier, Inc. All rights reserved.
  • 33. まとめ©Actier, Inc. All rights reserved.
  • 34. MDA でモデルは動作したか? 実際には動作まで実現できていない  静的構造は設計書の通り維持される! → 保守フェーズで有効活用が期待できる モデルを動作させるために  シーケンス図や状態マシンを活用するか? → 実装作業の効率を下げないか不安 → 新しい仕組みが出てきた時に即時対応しづらいので は? ビジネスロジックを編み込む  継承可能なものはGeneration Gap パターン  継承不可能なものは Hoop Operation パターン ©Actier, Inc. All rights reserved.
  • 35. 効率アップのための MDA 劇的に効率上がったか?  規模が小さいとそれほど効果的ではない気がする → 仕様変更の対応はやり易い 自動生成だけでは効率上がらない(開発全体を考えろ)  やるべきことはやる! → 継続的インテグレーション、単体テスト、構成管理、作業管理  自動生成に効果的な開発方法論 → 何を自動生成対象として UML で表現するか  繰り返し型開発に耐える → 実装したコードを上書きしないデザインパターン  自動生成コードは Jar にパッケージ化して提供 → 実装者が設計部分を変更できないように  設計ドキュメントの効果的な提示 → UML ツール起動しないと何もわからないのはダメ  少数精鋭の小さなプロジェクトチーム → 開発方法論を実践できるチームビルド ©Actier, Inc. All rights reserved.
  • 36. モデルは動かなかったでもスケッチからは脱却した! ©Actier, Inc. All rights reserved.
  • 37. ご清聴ありがとうございました ©Actier, Inc. All rights reserved.

×