34
Spring4D ののの 第 28 第 第第第第第第 第第第第第第第第第第 2014/04/22 第第第第第第第第第第 第第第第

Spring4Dの紹介

Embed Size (px)

Citation preview

Page 1: Spring4Dの紹介

Spring4D の紹介第 28 回 エンバカデロ・デベロッパーキャンプ

2014/04/22

株式会社ビープラウド 岡野真也

Page 2: Spring4Dの紹介

今日紹介するのは

Page 3: Spring4Dの紹介

Spring4D

Page 4: Spring4Dの紹介

→Spring Framework for Delphi

Page 5: Spring4Dの紹介

の主にDIコンテナ

Page 6: Spring4Dの紹介

“Spring Framework”

Page 7: Spring4Dの紹介

→Java のアプリケーション

フレームワーク

Page 8: Spring4Dの紹介

Spring4D の機能

Page 9: Spring4Dの紹介

Spring4D の機能

• 便利なクラスライブラリ• 一般的な型• インターフェースベースのコレクション

型• リフレクション拡張• など…

•DI コンテナ

Page 10: Spring4Dの紹介

開発元やライセンスなど

• オープンソースプロジェクト• https://bitbucket.org/sglienke/spring4d

• ライセンス• Apache License 2.0

• 対応 Delphi バージョン• 2010 ~ XE6

Page 11: Spring4Dの紹介

“DI”

Page 12: Spring4Dの紹介

→Dependency Injection( 依存性の注入 )

Page 13: Spring4Dの紹介

Dependency Injection ( 依存性の注入 )

• ソフトウェアデザインパターン• コンポーネント ( ユニットやクラス ) 間

の依存関係をソースコードから取り除く• 外部の設定などで依存関係を注入する

Page 14: Spring4Dの紹介

ユニットやクラス間の依存関係

Page 15: Spring4Dの紹介

例 . 計算機アプリ

TCalculatoruCalculator.p

as

TMathService

uMathService.pas

uses uMathService;service := TMathService.Create;

• TMathService は計算処理を行う• uMathService.pas

• TCalculator は値の入出力と橋渡し• uCalculator.pas

• TCalculator は TMathService を利用• →uCalculator.pas はuMathService.pas に依存

Page 16: Spring4Dの紹介

欠点

Page 17: Spring4Dの紹介

依存関係がある場合の欠点

• 再利用しにくい• 単体テストしにくい TCalculator

uCalculator.pas

TMathService

uMathService.pas

uses uMathService;service := TMathService.Create;

uCalculator だけをテストしたいがuMathService も必要となる

TMathService を別の処理に差し替えたいが、 uCalculator.pas を編集しないといけない

Page 18: Spring4Dの紹介

DI コンテナを利用して依存関係を除去する

Page 19: Spring4Dの紹介

Spring.Container.TContainer

Page 20: Spring4Dの紹介

Spring.Container.TContainer

• Spring4D の DI コンテナ• クラス登録

• TContainer.RegisterComponent<T>.Implements<I>

• クラス / インスタンス取得• TContainer.Resolve<I>

Page 21: Spring4Dの紹介

DI コンテナを利用して依存関係を除去する

// コンテナから計算処理クラスのインスタンスを取得service := Container.Resolve<IMathService>;

• インターフェースを用意

• DI コンテナを用意

uServiceLocator.pas

TContaineruServiceLocator.pas

uServiceLocator.pas

IMathService

uMathServiceIntf.pas

uServiceLocator.pas

TMathService

uMathService.pas

実装クラス登録 インターフェース利用

• インターフェースを実装• 実装クラスをコンテナに

登録 ( 依存性の注入 )

uServiceLocator.pas

TCalculatoruCalculator.pas

インスタンス取得

インターフェース利用

• コンテナから実装クラス ( のインスタンス )を取得

Page 22: Spring4Dの紹介

依存性を除去できました

Page 23: Spring4Dの紹介

依存度が低いと

Page 24: Spring4Dの紹介

実装の差し替えも簡単です

Page 25: Spring4Dの紹介

実装の差し替え例

• TMathService を RPC で処理するTRemoteMathService に差し替える

uServiceLocator.pas

TContaineruServiceLocator.pas

uServiceLocator.pas

IMathService

uMathServiceIntf.pas

uServiceLocator.pas

TCalculatoruCalculator.pas

インスタンス取得

インターフェース利用

uServiceLocator.pas

TMathService

uMathService.pas

実装クラス登録 インターフェース利用

uServiceLocator.pas

TRemoteMathService

uRemoteMathService.pas

実装クラス登録 インターフェース利用

ユニットを差し替えるだけ!

Page 26: Spring4Dの紹介

便利なので試してみてね!

Page 27: Spring4Dの紹介

サンプルコード

Page 28: Spring4Dの紹介

http://bit.ly/devcamp28-spring4d

Page 29: Spring4Dの紹介

時間があればデモ

Page 30: Spring4Dの紹介

まとめ

• Spring4D には DI コンテナが含まれている• DI コンテナを使うとクラス間の依存性を除去

できる• 依存性を除去することでクラスの再利用や実装

の差し替え、テストが容易になる

Page 32: Spring4Dの紹介

詳しくは DelphiTalks で。

Page 33: Spring4Dの紹介

第 7 回 Delphi Talks @ 東京

• 日時 : 2014/04/26( 土 ) 13:30  ~ 17:30

• 場所 : 株式会社ビープラウド 会議室 ( 新宿 )

• 参加申込み :• http://connpass.com/event/6021/• facebook 上のイベント• ML やフォーラムの案内への返信でも ok

Page 34: Spring4Dの紹介

ご清聴ありがとうございました