SlideShare a Scribd company logo
1 of 34
Spring4Dの紹介
第28回 エンバカデロ・デベロッパーキャンプ
2014/04/22
株式会社ビープラウド 岡野真也
今日紹介するのは
Spring4D
→Spring Framework for
Delphi
の
主にDIコンテナ
“Spring Framework”
→Javaのアプリケーショ
ン
フレームワーク
Spring4Dの機能
Spring4Dの機能
• 便利なクラスライブラリ
• 一般的な型
• インターフェースベースのコレクション
型
• リフレクション拡張
• など…
•DIコンテナ
開発元やライセンスなど
• オープンソースプロジェクト
• https://bitbucket.org/sglienke/spring4d
• ライセンス
• Apache License 2.0
• 対応Delphiバージョン
• 2010~XE6
“DI”
→Dependency Injection
(依存性の注入)
Dependency Injection (依存性の注入)
• ソフトウェアデザインパターン
• コンポーネント(ユニットやクラス)間の
依存関係をソースコードから取り除く
• 外部の設定などで依存関係を注入する
ユニットやクラス間の
依存関係
例. 計算機アプリ
TCalculator
uCalculator.pas
TMathService
uMathService.pas
uses uMathService;
service := TMathService.Create;
• TMathServiceは計算処理を行う
• uMathService.pas
• TCalculatorは値の入出力と橋渡し
• uCalculator.pas
• TCalculatorはTMathServiceを利用
• →uCalculator.pasは
uMathService.pasに依存
欠点
依存関係がある場合の欠点
• 再利用しにくい
• 単体テストしにくい TCalculator
uCalculator.pas
TMathService
uMathService.pas
uses uMathService;
service := TMathService.Create;uCalculatorだけをテストしたい
が
uMathServiceも必要となる
TMathServiceを別の処理に差し
替えたいが、uCalculator.pasを
編集しないといけない
DIコンテナを利用して
依存関係を除去する
Spring.Container.TContainer
Spring.Container.TContainer
• Spring4DのDIコンテナ
• クラス登録
• TContainer.RegisterComponent<T>.Implements<I>
• クラス/インスタンス取得
• TContainer.Resolve<I>
DIコンテナを利用して
依存関係を除去する
// コンテナから計算処理クラスのインスタンスを
取得
service := Container.Resolve<IMathService>;
• インターフェースを用
意
• DIコンテナを用意
uServiceLocator.pas
TContainer
uServiceLocator.pas
uServiceLocator.pas
IMathService
uMathServiceIntf.pas
uServiceLocator.pas
TMathService
uMathService.pas
実装クラス登録 インターフェース利
用
• インターフェースを実装
• 実装クラスをコンテナに
登録(依存性の注入)
uServiceLocator.pas
TCalculator
uCalculator.pas
インスタンス取
得
インターフェース利
用
• コンテナから実装クラ
ス(のインスタンス)を
取得
依存性を除去できました
依存度が低いと
実装の差し替えも簡単です
実装の差し替え例
• TMathServiceをRPCで処理
するTRemoteMathService
に差し替える
uServiceLocator.pas
TContainer
uServiceLocator.pas
uServiceLocator.pas
IMathService
uMathServiceIntf.pas
uServiceLocator.pas
TCalculator
uCalculator.pas
インスタンス取
得
インターフェース利
用
uServiceLocator.pas
TMathService
uMathService.pas
実装クラス登録 インターフェース利
用
uServiceLocator.pas
TRemoteMathS
ervice
uRemoteMathService.
pas
実装クラス登録 インターフェース利
用
ユニットを差し替えるだ
け!
便利なので試してみてね!
サンプルコード
http://bit.ly/devcamp28-spring4d
時間があればデモ
まとめ
• Spring4DにはDIコンテナが含まれている
• DIコンテナを使うとクラス間の依存性を除去で
きる
• 依存性を除去することでクラスの再利用や実装
の差し替え、テストが容易になる
参考
• Getting Giddy with Dependency Injection and
Delphi Spring #5 – Delphi Spring Basics
• https://bitbucket.org/sglienke/spring4d
詳しくはDelphiTalks
で。
第7回 Delphi Talks @東京
• 日時: 2014/04/26(土) 13:30 〜 17:30
• 場所: 株式会社ビープラウド 会議室(新宿)
• 参加申込み:
• http://connpass.com/event/6021/
• facebook上のイベント
• MLやフォーラムの案内への返信でもok
ご清聴ありがとうございまし
た

More Related Content

What's hot

Open 棟梁 @ オープンソースカンファレンス 2015 Nagoya
Open 棟梁 @ オープンソースカンファレンス 2015 NagoyaOpen 棟梁 @ オープンソースカンファレンス 2015 Nagoya
Open 棟梁 @ オープンソースカンファレンス 2015 NagoyaDaisuke Nishino
 
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介日本マイクロソフト株式会社
 
Open棟梁プロジェクトの取り組み
Open棟梁プロジェクトの取り組みOpen棟梁プロジェクトの取り組み
Open棟梁プロジェクトの取り組みDaisuke Nishino
 
【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~
【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~
【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~日本マイクロソフト株式会社
 
Open棟梁 v2 ソリューション化検討資料
Open棟梁 v2 ソリューション化検討資料Open棟梁 v2 ソリューション化検討資料
Open棟梁 v2 ソリューション化検討資料Daisuke Nishino
 
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践日本マイクロソフト株式会社
 
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化についてDaisuke Nishino
 
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...日本マイクロソフト株式会社
 
Open棟梁プロジェクトの背景
Open棟梁プロジェクトの背景Open棟梁プロジェクトの背景
Open棟梁プロジェクトの背景Daisuke Nishino
 

What's hot (9)

Open 棟梁 @ オープンソースカンファレンス 2015 Nagoya
Open 棟梁 @ オープンソースカンファレンス 2015 NagoyaOpen 棟梁 @ オープンソースカンファレンス 2015 Nagoya
Open 棟梁 @ オープンソースカンファレンス 2015 Nagoya
 
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
【de:code 2020】 セキュアなソフトウェアを実現する、GitHub のコード解析のご紹介
 
Open棟梁プロジェクトの取り組み
Open棟梁プロジェクトの取り組みOpen棟梁プロジェクトの取り組み
Open棟梁プロジェクトの取り組み
 
【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~
【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~
【de:code 2020】 Build 2020 最新情報 ~コンテナ関連アップデート~
 
Open棟梁 v2 ソリューション化検討資料
Open棟梁 v2 ソリューション化検討資料Open棟梁 v2 ソリューション化検討資料
Open棟梁 v2 ソリューション化検討資料
 
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
 
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
.NET用アプリケーション フレームワーク “Open 棟梁”のオープンソース化について
 
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
 
Open棟梁プロジェクトの背景
Open棟梁プロジェクトの背景Open棟梁プロジェクトの背景
Open棟梁プロジェクトの背景
 

Similar to Spring4Dの紹介

MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめKenichi Sonoda
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf耕二 阿部
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化Yukei Wachi
 
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめxyzplus_net
 
PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発konekto
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界オラクルエンジニア通信
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)Wataru Kimura
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugSAKURUG co.
 
Dot netcore multiplatform 2
Dot netcore multiplatform 2Dot netcore multiplatform 2
Dot netcore multiplatform 2shozon
 
Rから利用するオープンデータAPI
Rから利用するオープンデータAPIRから利用するオープンデータAPI
Rから利用するオープンデータAPIs3works
 
HoloLensで外部定義ファイルを使う
HoloLensで外部定義ファイルを使うHoloLensで外部定義ファイルを使う
HoloLensで外部定義ファイルを使うTakahiro Miyaura
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修Suguru Yazawa
 
Drupal deployment trial on Engine Yard
Drupal deployment trial on Engine YardDrupal deployment trial on Engine Yard
Drupal deployment trial on Engine Yard惠 紀野
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたYasuharu Seki
 
Pgunconf neo4j fdw
Pgunconf neo4j fdwPgunconf neo4j fdw
Pgunconf neo4j fdwToshi Harada
 
Dep001 infrastructure as_code_!_linux_な人から見
Dep001 infrastructure as_code_!_linux_な人から見Dep001 infrastructure as_code_!_linux_な人から見
Dep001 infrastructure as_code_!_linux_な人から見Tech Summit 2016
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ寛 吉田
 

Similar to Spring4Dの紹介 (20)

MLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめMLflowで学ぶMLOpsことはじめ
MLflowで学ぶMLOpsことはじめ
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化
 
2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ
 
PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)
 
AndroidでDIxAOP
AndroidでDIxAOPAndroidでDIxAOP
AndroidでDIxAOP
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
 
Dot netcore multiplatform 2
Dot netcore multiplatform 2Dot netcore multiplatform 2
Dot netcore multiplatform 2
 
Odl intro20141029
Odl intro20141029Odl intro20141029
Odl intro20141029
 
Rから利用するオープンデータAPI
Rから利用するオープンデータAPIRから利用するオープンデータAPI
Rから利用するオープンデータAPI
 
HoloLensで外部定義ファイルを使う
HoloLensで外部定義ファイルを使うHoloLensで外部定義ファイルを使う
HoloLensで外部定義ファイルを使う
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修
 
Drupal deployment trial on Engine Yard
Drupal deployment trial on Engine YardDrupal deployment trial on Engine Yard
Drupal deployment trial on Engine Yard
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
Pgunconf neo4j fdw
Pgunconf neo4j fdwPgunconf neo4j fdw
Pgunconf neo4j fdw
 
Dep001 infrastructure as_code_!_linux_な人から見
Dep001 infrastructure as_code_!_linux_な人から見Dep001 infrastructure as_code_!_linux_な人から見
Dep001 infrastructure as_code_!_linux_な人から見
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
 

More from Shinya Okano

Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueDjangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueShinya Okano
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Shinya Okano
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplibShinya Okano
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Shinya Okano
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みShinya Okano
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Shinya Okano
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406Shinya Okano
 
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Shinya Okano
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Shinya Okano
 
2011.06.01 和歌山高専
2011.06.01 和歌山高専2011.06.01 和歌山高専
2011.06.01 和歌山高専Shinya Okano
 
電子書籍の話
電子書籍の話電子書籍の話
電子書籍の話Shinya Okano
 
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバーShinya Okano
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17Shinya Okano
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジShinya Okano
 

More from Shinya Okano (17)

Djangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHueDjangoエンジニアの観点から見たHue
Djangoエンジニアの観点から見たHue
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Djangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組みDjangoのエントリポイントとアプリケーションの仕組み
Djangoのエントリポイントとアプリケーションの仕組み
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406
 
Hadoopとその周辺の紹介
Hadoopとその周辺の紹介Hadoopとその周辺の紹介
Hadoopとその周辺の紹介
 
Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介Delphi ideを使わない開発スタイルの紹介
Delphi ideを使わない開発スタイルの紹介
 
2011.06.01 和歌山高専
2011.06.01 和歌山高専2011.06.01 和歌山高専
2011.06.01 和歌山高専
 
電子書籍の話
電子書籍の話電子書籍の話
電子書籍の話
 
写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー写真共有アプリのバックエンドサーバー
写真共有アプリのバックエンドサーバー
 
Python札幌 2012/06/17
Python札幌 2012/06/17Python札幌 2012/06/17
Python札幌 2012/06/17
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジmixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
 

Spring4Dの紹介