Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
貴志 上坂
PPTX, PDF
1,104 views
NS study8 DDD Microservices Azuer Service Fabric
de:code2016の内容をブラッシュアップしたものです。 Service Fabricの概要説明を追加してあります。
Software
◦
Read more
4
Save
Share
Embed
Embed presentation
Download
Downloaded 10 times
1
/ 52
2
/ 52
3
/ 52
4
/ 52
5
/ 52
6
/ 52
7
/ 52
8
/ 52
9
/ 52
10
/ 52
11
/ 52
12
/ 52
13
/ 52
14
/ 52
15
/ 52
16
/ 52
17
/ 52
18
/ 52
19
/ 52
20
/ 52
21
/ 52
22
/ 52
23
/ 52
24
/ 52
25
/ 52
26
/ 52
27
/ 52
28
/ 52
29
/ 52
30
/ 52
31
/ 52
32
/ 52
33
/ 52
34
/ 52
35
/ 52
36
/ 52
37
/ 52
38
/ 52
39
/ 52
40
/ 52
41
/ 52
42
/ 52
43
/ 52
44
/ 52
45
/ 52
46
/ 52
47
/ 52
48
/ 52
49
/ 52
50
/ 52
51
/ 52
52
/ 52
More Related Content
PDF
2016-11-11 UMTP モデリングフォーラム2016 DDD実践のコツとazureによるモデル実装
by
貴志 上坂
PDF
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
by
貴志 上坂
PDF
第5回 cogbot勉強会!
by
貴志 上坂
PPTX
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
by
Takeshi Hirosue
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
by
貴志 上坂
PDF
Sb tech night#1_document_otsuki_202104
by
YusukeOtsuki
PDF
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
by
Developers Summit
PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
by
Trainocate Japan, Ltd.
2016-11-11 UMTP モデリングフォーラム2016 DDD実践のコツとazureによるモデル実装
by
貴志 上坂
始めよう! ドメイン駆動設計&マイクロサービス開発 ~C# と Azure Service Fabric で最高の DDD 開発を~
by
貴志 上坂
第5回 cogbot勉強会!
by
貴志 上坂
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
by
Takeshi Hirosue
Azure Api Management 俺的マニュアル 2020年3月版
by
貴志 上坂
Sb tech night#1_document_otsuki_202104
by
YusukeOtsuki
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
by
Developers Summit
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
by
Trainocate Japan, Ltd.
What's hot
PDF
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
by
dcubeio
PDF
AWS & Google Cloud 両方を駆使するチームでの技術選定
by
修一 高橋
PPTX
これからはじめる Power Platform
by
Rie Okuda
PDF
【初公開】チャットワーク検索機能を支える技術
by
Yoshinori Fujiwara
PDF
先進的なアプリの短期開発を実現する 「IBM Bluemix Garage Method」と 「Open Toolchains」
by
岬 宇藤
PDF
SIビジネスを変えよう。~ Ruby+Ruby on RailsによるエンタープライズCloudアプリケーション事業とは~
by
Kachi Creo
PPTX
AWS & Google Cloudを使ったシステム開発/技術選定のはなし
by
修一 高橋
PDF
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
by
Atsumori Sasaki
PDF
【Japan Partner Conference 2019】『君、明日から Azure 担当ね!』 VMware パートナー様必見! 明日からできる最新...
by
日本マイクロソフト株式会社
PDF
ユーザーデータ基盤を1からScalaでつくった話し
by
Hideaki Tarumi
PDF
Vs code conf2020-11-21-extensions-for-microservices-app-dev
by
Shotaro Suzuki
PPTX
大人の基礎C#【Niigat.NET 2015-10】
by
Mitsuhito Ishino
PDF
[Developers Festa Sapporo 2018] Azure AI ~Microsoft AzureでのAI開発のイマ~
by
Naoki (Neo) SATO
PDF
20150523 chatwork continuous delivery
by
Yoshinori Fujiwara
PDF
JPC2018[G4]Microsoft Azure で金融機関の未来を創る -デジタル トランスフォーメーションを支える金融機関の IT-
by
MPN Japan
PDF
Introducing microsoft learn
by
ru pic
PDF
Microsoft MVP が語る Azure 移行の勘所
by
Tetsuya Odashima
PDF
センサーデバイスのデータを使った Microsoft Azure Machine Learning 実装入門
by
Koichiro Sasaki
PDF
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
by
貴志 上坂
PDF
13_B_5 Who is a architect?
by
Atsushi Fukui
【D3 公開用】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜
by
dcubeio
AWS & Google Cloud 両方を駆使するチームでの技術選定
by
修一 高橋
これからはじめる Power Platform
by
Rie Okuda
【初公開】チャットワーク検索機能を支える技術
by
Yoshinori Fujiwara
先進的なアプリの短期開発を実現する 「IBM Bluemix Garage Method」と 「Open Toolchains」
by
岬 宇藤
SIビジネスを変えよう。~ Ruby+Ruby on RailsによるエンタープライズCloudアプリケーション事業とは~
by
Kachi Creo
AWS & Google Cloudを使ったシステム開発/技術選定のはなし
by
修一 高橋
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
by
Atsumori Sasaki
【Japan Partner Conference 2019】『君、明日から Azure 担当ね!』 VMware パートナー様必見! 明日からできる最新...
by
日本マイクロソフト株式会社
ユーザーデータ基盤を1からScalaでつくった話し
by
Hideaki Tarumi
Vs code conf2020-11-21-extensions-for-microservices-app-dev
by
Shotaro Suzuki
大人の基礎C#【Niigat.NET 2015-10】
by
Mitsuhito Ishino
[Developers Festa Sapporo 2018] Azure AI ~Microsoft AzureでのAI開発のイマ~
by
Naoki (Neo) SATO
20150523 chatwork continuous delivery
by
Yoshinori Fujiwara
JPC2018[G4]Microsoft Azure で金融機関の未来を創る -デジタル トランスフォーメーションを支える金融機関の IT-
by
MPN Japan
Introducing microsoft learn
by
ru pic
Microsoft MVP が語る Azure 移行の勘所
by
Tetsuya Odashima
センサーデバイスのデータを使った Microsoft Azure Machine Learning 実装入門
by
Koichiro Sasaki
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
by
貴志 上坂
13_B_5 Who is a architect?
by
Atsushi Fukui
Viewers also liked
PPTX
Azure Service Fabric 概要
by
Daiyu Hatakeyama
PDF
Microsoft: Building a Massively Scalable System with DataStax and Microsoft's...
by
DataStax Academy
PPTX
08 hopex v next service fabric
by
Michel Bruchet
PPTX
From a monolith to microservices with Azure Service Fabric
by
Stéphane ERBRECH
PPTX
Миграция в Azure Service Fabric
by
Alexander Laysha
PPTX
Azure Service Fabric pour les développeurs
by
Microsoft
PDF
Microservices to Scale using Azure Service Fabric
by
Mukul Jain
PPTX
CloudBrew 2016 - Building IoT solution with Service Fabric
by
Teemu Tapanila
PPTX
Deep dive into service fabric after 2 years
by
Tomasz Kopacz
PPTX
祝GA、 Service Fabric 概要
by
Takekazu Omi
PDF
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...
by
Publicis Sapient Engineering
PPTX
Micro services architecture and service fabric
by
Luis Valencia
PPTX
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
by
MSDEVMTL
PPTX
Azure Service Fabric and the Actor Model: when did we forget Object Orientation?
by
João Pedro Martins
PPTX
Devteach 2016: A practical overview of actors in service fabric
by
Brisebois
PPTX
Tokyo Azure Meetup #5 - Microservices and Azure Service Fabric
by
Tokyo Azure Meetup
PPTX
Azure Service Fabric Overview
by
João Pedro Martins
PPTX
Tokyo azure meetup #12 service fabric internals
by
Tokyo Azure Meetup
PDF
俺も エクストリームプログラミング入門
by
Fumihiko Kinoshita
PPTX
Azure Service Fabric - weaving services in hyper-scale
by
Sebastian Gebski
Azure Service Fabric 概要
by
Daiyu Hatakeyama
Microsoft: Building a Massively Scalable System with DataStax and Microsoft's...
by
DataStax Academy
08 hopex v next service fabric
by
Michel Bruchet
From a monolith to microservices with Azure Service Fabric
by
Stéphane ERBRECH
Миграция в Azure Service Fabric
by
Alexander Laysha
Azure Service Fabric pour les développeurs
by
Microsoft
Microservices to Scale using Azure Service Fabric
by
Mukul Jain
CloudBrew 2016 - Building IoT solution with Service Fabric
by
Teemu Tapanila
Deep dive into service fabric after 2 years
by
Tomasz Kopacz
祝GA、 Service Fabric 概要
by
Takekazu Omi
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...
by
Publicis Sapient Engineering
Micro services architecture and service fabric
by
Luis Valencia
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
by
MSDEVMTL
Azure Service Fabric and the Actor Model: when did we forget Object Orientation?
by
João Pedro Martins
Devteach 2016: A practical overview of actors in service fabric
by
Brisebois
Tokyo Azure Meetup #5 - Microservices and Azure Service Fabric
by
Tokyo Azure Meetup
Azure Service Fabric Overview
by
João Pedro Martins
Tokyo azure meetup #12 service fabric internals
by
Tokyo Azure Meetup
俺も エクストリームプログラミング入門
by
Fumihiko Kinoshita
Azure Service Fabric - weaving services in hyper-scale
by
Sebastian Gebski
Similar to NS study8 DDD Microservices Azuer Service Fabric
PPTX
20100324 勉強会資料(ドメイン駆動)
by
Masayuki Kanou
PPTX
Implementing Domain-Driven Design: Part 1
by
Atsushi Kambara
PPTX
Relationship betweenddd and mvc
by
Takao Tetsuro
PDF
Dddをもっと身近に
by
Yukei Wachi
PDF
2022_sakura-yube_ddd.pdf
by
toshiki kawai
PDF
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
by
Koichiro Matsuoka
PDF
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
by
Takuya Kawabe
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
PPT
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
PDF
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
by
Tomoharu ASAMI
PDF
コードに語らせるために
by
Yukei Wachi
PDF
ドメイン駆動設計 at DDD.rb #5
by
啓 杉本
PPTX
社内 DDD 勉強会 #2
by
shingo suzuki
PDF
Loose and fluffy_ddd_intro
by
cch-robo
PDF
ドメイン駆動設計入門
by
増田 亨
PDF
ドメイン駆動設計入門
by
Takuya Kitamura
PDF
【19-B-5】出張!DDD難民救済キャンプ
by
kentaro watanabe
PPTX
福岡DDD勉強会vol.1
by
Yunosuke Taga
PDF
ドメイン駆動設計を実践するプログラマーの悩み
by
haljik Seiji
PPTX
FiNC DDD第一回勉強会
by
裕紀 重村
20100324 勉強会資料(ドメイン駆動)
by
Masayuki Kanou
Implementing Domain-Driven Design: Part 1
by
Atsushi Kambara
Relationship betweenddd and mvc
by
Takao Tetsuro
Dddをもっと身近に
by
Yukei Wachi
2022_sakura-yube_ddd.pdf
by
toshiki kawai
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
by
Koichiro Matsuoka
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
by
Takuya Kawabe
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
by
Tomoharu ASAMI
コードに語らせるために
by
Yukei Wachi
ドメイン駆動設計 at DDD.rb #5
by
啓 杉本
社内 DDD 勉強会 #2
by
shingo suzuki
Loose and fluffy_ddd_intro
by
cch-robo
ドメイン駆動設計入門
by
増田 亨
ドメイン駆動設計入門
by
Takuya Kitamura
【19-B-5】出張!DDD難民救済キャンプ
by
kentaro watanabe
福岡DDD勉強会vol.1
by
Yunosuke Taga
ドメイン駆動設計を実践するプログラマーの悩み
by
haljik Seiji
FiNC DDD第一回勉強会
by
裕紀 重村
More from 貴志 上坂
PDF
開発者のための機械学習入門:Azure Machine Learning Studioで構造化データから予測分析
by
貴志 上坂
PPTX
開発者のための機械学習入門:Azure Machine Learning Studioで構造化データから予測分析
by
貴志 上坂
PPTX
Azure API Management 俺的マニュアル
by
貴志 上坂
PPTX
Ns study Azure IoTHub紹介
by
貴志 上坂
PDF
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-
by
貴志 上坂
PDF
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~
by
貴志 上坂
PDF
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計
by
貴志 上坂
PDF
クラウドデザインパターンのススメ
by
貴志 上坂
PDF
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~
by
貴志 上坂
PDF
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
by
貴志 上坂
開発者のための機械学習入門:Azure Machine Learning Studioで構造化データから予測分析
by
貴志 上坂
開発者のための機械学習入門:Azure Machine Learning Studioで構造化データから予測分析
by
貴志 上坂
Azure API Management 俺的マニュアル
by
貴志 上坂
Ns study Azure IoTHub紹介
by
貴志 上坂
アルゴリズムから学ぶAzure mlモジュールの使いこなし方 hd-insight編-
by
貴志 上坂
Azure Machine Learningによるレコメンデーションの設計&実装を公開!~朝日カルチャーセンターの事例から~
by
貴志 上坂
20150421 QCon Tokyo 2015 Azureが切り開く新時代のソフトウェア開発・設計
by
貴志 上坂
クラウドデザインパターンのススメ
by
貴志 上坂
クラウドデザインパターンから始めるクラウドの利点と弱点の理解~提案から設計・開発・保守に活かす!~
by
貴志 上坂
Enterprise cloud design pattern 大量データ処理アーキテクチャの構築
by
貴志 上坂
NS study8 DDD Microservices Azuer Service Fabric
1.
2016/07/06 株式会社ネクストスケープ エバンジェリスト 上坂貴志 NSStudy No.8 www.nextscape.net
1 ~C# と Azure Service Fabric で最高の DDD 開発を~ ドメイン駆動設計&Azureで 行うマイクロサービス開発
2.
アジェンダ なぜ今Microservicesなのか MicroservicesとDDD Domain-Driven Design DDD導入のハードル Azure Service
Fabric 最後に www.nextscape.net 2
3.
自己紹介 • 会社 株式会社ネクストスケープ • 名前 上坂貴志(うえさかたかし)Twitter:@takashiuesaka •
年齢 44歳 • 好き・興味あり Azure(Microsoft MVP for Microsoft Azure)、 Scrum(認定スクラムマスター) DDD、ソフトウェアアーキテクチャ、機械学習 • 講演活動 • 2016年 de:code 2016 DDD & Azure Service Fabric 登壇 NS Study No.6 Azure IoTHub紹介 アプレッソ 最新IT事例セミナー Azure Machine Learning セミナー登壇 SANSAN DDD勉強会発表 • 2015年 FEST2015 (Channel9で動画公開) MSxNextscape合同 Azure Machine Learningセミナー開催 Developers Summit 2015 QCon 2015 CloudDays2015東京・大阪 3 • 執筆活動 • 人工知能アプリケーション総覧 寄稿(日経BP社、2015年9月30日発売) • ITPro:クラウドで機械学習を手近に、Azure Machine Learningの概要 www.nextscape.net 3
4.
会社紹介 www.nextscape.net 4 設立年月日 2002年4月10日 資本金
1億5001万円 主要株主 株式会社豆蔵ホールディングス (東証一部上場) 〒163-0722 東京都新宿区西新宿2-7-1 小田急第一生命ビル22F 03-5325-1301(代表)
5.
会社紹介 www.nextscape.net 5 クラウド、デジタルマーケティング、システム構築に強み (※2012年~2014年マイクロソフト パートナーズ
オブ ザ イヤー) 2013 Microsoft Worldwide Partner Award において Sitecore Of The Year Asia 2013において Cloud Partner of the Year ファイナリスト選出 Best Japanese Siteを受賞 3年連続 Microsoft Azureパートナー アワード受賞
6.
会社紹介 www.nextscape.net 6 タワーレコード様 「NO MUSIC,
NO LIFE.」のキャッチフレーズでおなじみの、音楽エンタメ・小売り事業の大手。 250万点もの商品を取り扱うオンラインショップ「TOWER RECORDS ONLINE」のCMSをSitecoreで構 築。 2010年当時に1日当たり100万強だったPVは、2014年4月時点で205万強まで倍増。 https://www.sitecore.net/ja-jp/customers/e-commerce/towerrecords.aspx エイベックス通信放送様( dTV powerd by BeeTV ) 「dビデオ powered by BeeTV」は、スマートフォン利用者向けに映画、ドラマなどを視聴可能な国内最大 規模の動画配信サイトとして注目を集めている。 Microsoft Azureにて、高負荷・ハイパフォーマンスに耐えうるスケーラブルな配信インフラを構築。 http://special.nikkeibp.co.jp/as/201207/mpncompetency/cs01.html 400万会員を超える動画サイトの配信インフラを構築 EC売上を3年間で2倍以上にしたタワーレコードの成長を支えたCMS基盤を導入
7.
なぜ今 Microservicesなのか
8.
なぜ今Microservicesなのか www.nextscape.net 8 サービス切り出し指針がなかった サービス間の連携について標準がなかった 可用性を担保が難しかった 分散リソース実装が辛すぎた 初期SOAの思想は素晴らしかった だが思想を実現する前にSOAの概念が拡大しすぎた 設計 設計・実装 インフラ 実装 初期SOAの思想の実現ですら難しかった
9.
MicroservicesとDDD
10.
MicroservicesとDDD www.nextscape.net 10 よく見かけるのが というやり取り。 サービスをどうやって 分割すればいい? DDDの「境界付けられたコ ンテキスト」が参考になり ます 折角DDDに触れるのにそこだけ?勿体無い!
11.
Domain-Driven Design
12.
DDDの考える課題 www.nextscape.net 12 戦略 要件
基本設計 詳細設計 実装 変換 変換 変換 変換 この戦略はどの実装? この実装はどの戦略? この変換が全ての元凶!
13.
DDDの考える課題 www.nextscape.net 13 顧客にとっては理不尽だらけのIT業界 機能追加して 機能の改善して バグだ!すぐ修正して 工数とスケジュールの提示 するけど・・・ でも工数の根拠は提示されない。提示できない。
14.
DDDの考える課題 小さな機能追加依頼 • 以前と同じぐらいのボリュームだろう、 と顧客は思っている 見積もり提示 • 以前に比べて高額 •
でも根拠は提示されない(できない) 不信感 • 高い!遅い!前と違う! • もっと早く、もっと安くできるでしょ? スケジュール優先の対応 •顧客の要望は品質よりスケジュール、予算より スケジュール、と理解 •ソースが肥大化(品質悪化) www.nextscape.net 14 不信感の負の連鎖
15.
DDDの目指す世界 業務をモデルで 表す モデルをそのま ま実装する モデルから業務 を改善する www.nextscape.net 15 業務と実装のギャップを埋める 余談:業務=ドメインってこと?詳しくは後ほど
16.
DDDのよくある誤解 そういう箇所も一部もありますが、それはDDDの メインではありません。 ビジネスモデリングなどの要求開発工程から業務 フローなどの要件定義工程などを含んでいます。 www.nextscape.net
16 DDDとは デザインパターンのような設計技法 である
17.
モデリングから実装へのプロセス ドメインをコン テキストで分割 コンテキストごと にドメインをモデ ルとして表現する モデルをそのま ま実装する www.nextscape.net 17 最初はものすごくざっくりとした理解から
18.
そもそもドメインとは何か もっとざっくりと具体的には、ドメインとは www.nextscape.net 18 システムを使う人にとっての関心事のことです。 DDDではドメインエキスパート、という言 葉出てきます。これは業務(ビジネス)に 精通している人のことを指します。 業務
業務の成果 という感じで最初はいいんじゃないでしょうか 達成したいことエンドユーザー 運用者 ※異論は認めます!他にもステークホルダーはいっぱいいますよね が
19.
ではコンテキストとは何か 誤解を恐れず に言えば、 「環境」 特定のモデル 達だけが意味 を持つ「環 境」 モデルが特定 の意味を持つ ための「前提 条件」 www.nextscape.net 19 そのモデルは、そのコンテキストだけでしか成立しない もうちょっと言えば もっと正確に言うと
20.
ではコンテキストとは何か www.nextscape.net 20 メンバー同士の会話 特定の作業 あるコードの範囲 そのモデルは、そのコンテキストだけでしか成立しない コンテキストの例 例:料金というモデル。ある時は送料を、あ る時は発注代金を表す 例:コンテンツを個人単位にブックマークす る機能のことを、ある時はお気に入り機能、 ある時はクリップボード機能 よくある混乱
違うものを同じ言葉で表す 同じものを違う言葉で表す
21.
境界付けられたコンテキストとは 業務別 • 在庫管理業務 • 商品発送業務 顧客の組織別 •
パッケージング・発送 • 経理 • 経営 • 広告 他システム • DDD本の例だとレガ シーシステムが良く出 てくる www.nextscape.net 21 つまり粗い前提条件別にアプリを分割すること よくある分割指針 コンテキスト(前提条件)が違うことが明確になった結果のこと
22.
分割したコンテキストを明示化 www.nextscape.net 22 順応者 図の参考:コンテキストマッピングによる戦略的ドメイン駆動設計 https://www.infoq.com/jp/articles/ddd-contextmapping_jp コンテキストマップ 目的1.コンテキスト間の関係を明示化 コンテキスト間の情報の伝達に は注意が必要 他コンテキストのモデルで自分のモ デルを侵食されないようにする腐敗 防止層(Anti
Corruption Layer)の検討を 情報変更のトリガーとしてドメイン イベントの検討を Webユーザープロファイル 個人財務管理銀行 システム 支払い追跡 オンライン銀行 サービス (レガシーシステム) パートナー U D D U
23.
分割したコンテキストを明示化 www.nextscape.net 23 目的2.コンテキスト間のモデルのマッピング 図の参考:Modularity and
Domain Driven Design; a killer combination? http://www.slideshare.net/aca_it/modularity-ddd コンテキストマップ 車 オプション オーナー 保証 モデル 製造 車コンテキスト 輸送 場所 輸送対象 輸送先顧客 輸送依頼元 輸送コンテキスト ビジネス パートナー 担当窓口 住所 ビジネスパートナーコンテキスト from to
24.
不信感の負の連鎖を 断ち切る www.nextscape.net 24
25.
モデルを顧客と作る モデルを顧客と作る=要件定義+設計です www.nextscape.net 25 • モデルで使用されている名詞や動詞に、顧客が知らない言葉があってはなら ない。 •
モデルがそのままコードになる=言葉がコードで使用される 顧客と同じ言葉でモデリングする。 業務の中身をモデリ ング • 顧客と一緒にモデリ ングすることが重要 開発者もモデリング に参加する意義 • 業務を正確に把握で きる 顧客もモデリングに 参加する意義 •複雑な業務がそのままコー ドになることから コスト感覚を持てる 重要なプラクティス、ユビキタス言語
26.
おまけの話 DDDのソフトウェアアーキテクチャ 達成すべきこと •ドメインレイヤー内でドメインモデル以外の余計なものを絶対に入れない •DDD本ではレイヤーアーキテクチャが掲載されているが、特にこの構成を採用せよと規定されていない www.nextscape.net 26 図の参考:DDD and
Hexagonal architecture http://tindaloscode.blogspot.jp/2013/11/ddd-and-hexagonal-architecture.html 「実践ドメイン駆動設計」では PortAndAdapter(別名ヘキサゴナル アーキテクチャ)をお勧めしている 余計なものって?例えば データ永続化 ロジック トランザク ション 権限チェック ロジック ドメイン Layer Port 内部Client Port 外部Client Port 内部永続化Port 外部サービスPort HTML Web Gadget RIA Viewer Web API ESB inbound RDBMS In-memory Object store 他システム ESB outbound プレゼン Layer インフラ Layer
27.
DDD導入のハードル
28.
DDDがなかなか採用されない理由 DDD本が難解すぎる • とにかく分厚い • 前提とするスキルレベルがかなり 高い(PoEAA知ってるとか) •
章立てとプロセスが紐づいていな いので混乱しやすい 設計・実装のイメー ジが沸かない • 結局どうすればいいのかわからな い • どこから手を付ければいいのかわ からない モデリングできる人 がいない • 大抵の場合、ER図になる • もしくは、ただ構造を表しただけ の静的なモデルとなる www.nextscape.net 28 小さななシステ ムには向かない 手法 小さく実験して も効果がわから ない むしろ煩雑なだ けにしか感じな い 何がいいのかわ からない 最大のハードル:試しにくい
29.
ハードルを越えよう 「実践ドメイン駆動設計」は読みやすいです • 本で登場するサンプルの著者による実装がGithubにあります • https://github.com/VaughnVernon/IDDD_Samples まずは社内システムから •
そこそこ複雑なものを選ぶ • システム開発にあまり詳しくなく、モデリングに付き合って くれる業務担当者に協力を依頼 www.nextscape.net 29
30.
ハードルを越えよう www.nextscape.net 30 要件定義中からモデルを書きましょう • モデリングをする、ということは業務フロー=モデル、となるはずです •
逆にいうと、基本設計以降のフェーズだけでDDD採用は見送った方が良いです(負担ばかりが多くて価値が出にくい) コンテキストマップを書きましょう • これを軽視すると1つのコンテキストでモデリングしがちです。巨大なモデル群を作り上げてしまいます 最初からテーブル設計を絶対にしないこと • DDDを採用すると開発プロセスが変わります。 • モデリングという作業が強要され、要件定義=モデリングしつつ実装も進めます。 • ER図の作成開始はモデリングが完了してからです。が、モデリングは要件定義なのでなかなか固まりません。 • だからER図の作成は後回しにするしかないはずなのです。 • RDBMSで保存するなら最終的にテーブル設計は必要ですが、最初からやろうとしてはいけません。無駄になるだけなら いいですが、最悪モデリングしないで工程が進んでいきます。(もはやDDDではない) 私が感じた、実践したほうが良いプラクティス 大事!
31.
Azure Service Fabric 難解極まるMSDNを読み解こう!
32.
Azure Service Fabricとは www.nextscape.net
32 スタンドアロンアプリのクラスタ化PaaSです。 • クラスタリングとは? 多数の低廉なコンピュータを、特別なソフトウェア・ハード ウェアを用いて、あたかも1つの大きなコンピュータとして利 用できるように接続すること。(Wikipedia) 1. 負荷分散・・・複数のマシンで処理を分散 • クラスタの特徴とは? 2. 高可用性・・・1台のマシンが停止しても、待機系マシンがすぐ立ち上がる
33.
イメージ www.nextscape.net 33 Exe Exe Exe Exe Exe Exe Exe Exe処理リクエスト •
5つのExeで負荷分散 • 3つのExeが待機中
34.
イメージ www.nextscape.net 34 Exe Exe Exe Exe Exe Exe Exe Exe処理リクエスト •
5つのExeで負荷分散 • 3つのExeが待機中 Exe1つが停止してしまった
35.
イメージ www.nextscape.net 35 Exe Exe Exe Exe Exe Exe Exe Exe処理リクエスト •
5つのExeで負荷分散 • 3つのExeが待機中 Exe1つが停止してしまった 待機系が昇格
36.
イメージ www.nextscape.net 36 Exe Exe Exe Exe Exe Exe Exe Exe処理リクエスト •
5つのExeで負荷分散 • 3つのExeが待機中 再起動して待機系に 待機系が昇格
37.
Azure Service Fabricとは www.nextscape.net
37 スタンドアロンアプリは2種類に大別されます。 1. Exe, Javaアプリなどのスタンドアロ ンアプリをホスティング 2. ServiceFabricのSDKを使ったアプリ をホスティング(実はこれもスタン ドアロン ゲスト実行可能ファイル ステートレス サービス ステートフル サービス という名称です。でもServiceFabricは として起動します。 2種類のタイプのサービスを作ることが できます。ステートレスサービス
38.
Azure Service Fabricとは MSDNを見るともう1つReliable
Actorというものがあります。 これはExe単位ではなくオブジェクト単位のクラスタです。 www.nextscape.net 38 実態は ステートフルサービス です。 つまり、Service Fabricを理解する近道は ステートレス サービス ステートフル サービス を理解することです。 ※もっと言うと、ステートレスサービスから理解するとわかりやすいです。 ちなみにService FabricはオンプレでもLinuxでも動きます! 別にAzure上だけで動くサービスじゃありません!
39.
Azure Service Fabricでマイクロサービ スとは www.nextscape.net
39 大きな システム 小さな サービス 小さな サービス 小さな サービス 分割 小さな サービス 独立した小さなサービスが協調して 大きなシステムを構成 モノリス マイクロサービス
40.
Azure Service Fabricでマイクロサービ スとは www.nextscape.net
40 ステートレス、ステートレス、時には Acitorも組み合わせて大きなシステム を構成します。 大きな システム 分割 モノリス Service Fabric ステートフル サービス ステートフル サービス Microsoft Azure ステートレス サービス ステートレス サービス これ1つずつについて ・負荷分散 ・高可用性 を担保することができる
41.
Service Fabric SDk www.nextscape.net
41
42.
Service Fabric SDKを使った実装 www.nextscape.net
43 ServiceFabricのSDKを使って実装すると • 外部との通信が実現 • 中止、開始、停止時のイベントをハンドルできる プログラミングモデルの種類 Reliable Service Reliable Actor ステートレス Service ステートフル Service Exe等の実行ファイル 単位のホスティング Service Fabric の基本 オブジェクト単位 のホスティング データを保持しない StatelessServiceクラス を継承したクラスに実 装していく データを保持する StatefullServiceクラスを 継承したクラスに実装 していく
43.
StatelessService から覚えましょう。 www.nextscape.net 44
44.
Stateless Serviceの仮想メソッド達 www.nextscape.net 45 StatelessService ※StatefullServiceも同名の仮想メソッドを持っていて使い方も同じですが、クラ ス階層を辿っても、StatelessServiceとStatefullServiceは関連がありません 自作クラス Task
RunAsync( CancellationToken cancellationToken) Task OnOpenAsync( CancellationToken cancellationToken) Task OnCloseAsync( CancellationToken cancellationToken) void OnAbort() IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() サービス起動イベントハンドラ バッチ処理用 サービス起動準備の最後にレイ ズするイベントのハンドラ。初 期化処理用 サービス停止イベントハンドラ 外部からの着信を待ち受けるリ スナーを返却する サービス中止イベントハンドラ ※全部仮想メソッドなので必要 なメソッドだけOverrideする 上の4つのメソッドは イベントハンドラ
45.
Service Fabricの外部と通信する www.nextscape.net 46 StatelessService RunASync,
OnOpenASync, OnCloseASync, OnAbort MyService ICommunicationListener MyListener protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new MyListener ()) }; } Task<string> OpenAsync( CancellationToken cancellationToken) Task CloseAsync( CancellationToken cancellationToken) void Abort() 見ての通り、リスナーは複数 返せるのでエンドポイントを 複数用意できます。 1つはhttpで、もう1つもhttpで Port違い、3つ目はtcpでクラス タ内通信とかできます あれ?こっちも Open,Close,Abo rtじゃないか OpenASyncメソッドの戻り値で 返す文字列が重要。 外部からの着信をリッスンす る場所を返却する 例:http://ホスト名:port/ほげ ほげ
46.
Webで通信 IISが動かないので、OWINで自己ホストします Visual
Studioに用意されるテンプレートのService Fabric WebAPIはMSDNで解説している内容の完全実装です www.nextscape.net 47 StatelessService 自作クラス Startup void ConfigureApp(IAppBuilder appBuilder) protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new ServiceInstanceListener[] { new ServiceInstanceListener( serviceContext => new OwinCommunicationListener( Startup.ConfigureApp, serviceContext, ServiceEventSource.Current, "ServiceEndpoint")) }; } ICommunicationListener OwinCommunicationListener Task<string> OpenAsync(CancellationToken cancellationToken) OpenASyncでリッスンするURIを組み立てて、 サーバースタートしているだけ https://azure.microsoft.com/ja- jp/documentation/articles/service-fabric-reliable-services- communication-webapi/ MSDN解説のURL
47.
WCFで通信 www.nextscape.net 48 なんと。ICommunicationListenerを実装済みのクラスが提供 されています。Nugetで入れます
完全なサンプルが見当たらないので、実装のポイントをいくつか https://azure.microsoft.com/ja-jp/documentation/articles/service-fabric-reliable-services-communication-wcf/ MSDN解説のURL プロジェクト構成 ※サンプルではクライアントも同じクラスタ内で稼働させる必要が あるため、クライアントをStatelessServiceでプロジェクト追加します プロジェクト参照します
48.
WCFで通信 www.nextscape.net 49 WCFホスト側の実装 Calculatorの実装がサンプルに見当たりません。適当に作ってください class Calculator
: ICalculator { public Task<int> Add(int value1, int value2) { return Task.FromResult(value1 + value2); } } <Resources> <Endpoints> <Endpoint Name="WcfServiceEndpoint" Protocol="tcp" Port="8515"/> </Endpoints> </Resources> リッスンする場所とプロトコルを定義して名前つけます internal sealed class WcfHostStateless : StatelessService { private ICalculator _calculator; public WcfHostStateless(StatelessServiceContext context) : base(context) { this._calculator = new Calculator(); } protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext => new WcfCommunicationListener<ICalculator>( wcfServiceObject:this._calculator, serviceContext:base.Context, endpointResourceName: "WcfServiceEndpoint", listenerBinding: WcfUtility.CreateTcpListenerBinding() )) }; }
49.
WCFで通信 www.nextscape.net 50 サンプルでServiceUriというオブジェクトが説明なく出てきます。 これはWCFを実装したホストの場所を保持したUriオブジェクトです。 例:”fabric:/アプリ名/サービス名/” WCFクライアント側の実装 クライアント側にもライブラリをいれてください private void
CallWcf(StatelessServiceContext context, string endpointName) { var binding = WcfUtility.CreateTcpClientBinding(); IServicePartitionResolver partitionResolver = ServicePartitionResolver.GetDefault(); var wcfClientFactory = new WcfCommunicationClientFactory<ICalculator> (clientBinding: binding, servicePartitionResolver: partitionResolver); var calculatorServiceCommunicationClient = new WcfCommunicationClient( wcfClientFactory, new Uri("fabric:/ServiceFabricWcf/WcfHostStateless"), ServicePartitionKey.Singleton); var result = calculatorServiceCommunicationClient.InvokeWithRetryAsync( client => client.Channel.Add(2, 3)).Result; } サンプルそのままです this.CallWcf(this.Context, "WcfServiceEndpoint"); RunAsyncの中でCallWcfメソッドを呼びます Wcfホストと同じEndpoint 設定を記載します
50.
最後に
51.
で一緒に働きませんか! 一次請け案件100% SESやっていません。すべて自社開発(西新宿) www.nextscape.net 52 DDDプロジェク ト2つ進行中 Scrumプロジェ クト3つ進行中 裁量労働制 コーヒー、ミネラ ルウォーター、お 茶飲み放題 デュアルディスプ レイ支給 技術書籍は全額会 社負担 各種社外研修も全 額会社負担 海外カンファレン スも積極的に行け ます 募集中! •PM •PL •SE •スマホエンジニア
52.
イラストはこちらを利用させていただきました いらすとや:http://www.irasutoya.com/ www.nextscape.net 53 ブ ー ス に も 来 て ね ! NS Study で待って ます!
Editor's Notes
#8
ここでお話しする「なぜ」に対する答えはあくまで個人的に思うもの 他の人と違うこと言っている
#9
サービス切り出し指針がなかった こんな感じ?で切り出してみる ↓ 後から要件追加 ↓ 複数のサービスに関わりそうな要件 ↓ サービスの切り出しに失敗した・・・ ↓ 仕方ないから融合化、結局一つになっていく サービス間の連携が扱いづらい SOAPが登場した ↓ 仕様が重すぎて扱いづらかった。 ↓ WCFなんてどこいった? サービスの可用性を担保するのが難しかった サービスが落ちてしまった時の対応は? ↓ クラスタ組むためには専用のソフトが必要。高い。メンテは?誰がする? ↓ オンプレ冗長化も必要。=高コスト。 ↓ 導入コストが高い。運用コストも。 分散リソースに対する実装が辛すぎた ↓ 非同期を前提とした通信となるが ↓ 実装量の爆発が辛かった ---------------------------- 要するに設計も実装もインフラも全てがSOAに耐えられなかった 今ならできるのかも。 RESTがデファクトに クラウドによる可用性の担保 非同期実装も簡単になった 残る問題はサービスの切り出し。そこでDDD、という話が多いのかと。
#11
サービス境界をどうやって引くか。 その一つの解がDDDの「境界付けられたコンテキスト」というのがよく見かけます でも、SOAのサービスの粒度と、これと同じなの?っていうとそこは人によって色々意見あるようです 境界付けられたコンテキストを理解するためには ・ドメインとはなぜか ・コンテキストとは から理解が必要。 つまりDDDの世界観に触れて、理解することになる ↓ せっかくDDDに触れるのに、これだけしか理解しない、採用しないのはもったいないので、 少しだけ広げて話します
#12
DDDには流派があると思っています。 日本にも何人もDDDのエキスパートの方がいて、 色んなところでDDDセミナーやセッションを開催しています。 内容を比べると明確に同じではありません。 もちろん抽象度が高いところでは一致していると思いますが、 セミナー・セッションではやり方(HOW)に着目したものが 多いせいか解釈が異なる箇所もあるようです。 なので、私の今日話す内容についても、あくまで上坂が思うDDD、実践してきたDDD、と思っていたければと思います。
#13
矢印を一つずつたどる度に必ず変換が入る。 この変換が悪。 どうして?もちろん開発者にとって大変なのは説明いらないとは思う。 でも顧客にとっては理不尽すぎる現状がある。
#17
だから設計技法として理解しようとするとよくわからなくなるんです
#21
コンテキストが違うことを前提にしていれば同じ言葉(モデル)でも異なる意味を持つことに違和感を持つ人はいない じゃあコンテキストを明確に分けよう。 抽象化するのではなく。
#22
後はコンテキスト間の関係性を確認する、という作業と、コンテキスト内部のモデル間のマッピング定義を記述するための コンテキストマップ、というツールがあります。 これが実に重要。 だから境界付けられたコンテキストの概念でざっくりとサービスをわけて終わりにしないでください
#27
ESB・・・Enterprise Service Bus。SOA基盤
#43
Service FabricはオンプレでもLinuxでも動きますよ、という構成系の話は 直樹さんのセッションでたぶんやるんじゃないかなぁ、ということで省略
#44
ステートレスはStatelessService、ステートフルStafefullServiceというクラスを継承して作るのが基本形 ステートフルの方が少し扱えるイベントが多いだけで使い方は同じ
#46
RunASync デプロイされてサービスが準備OKになった後にこのメソッドが1回だけ呼ばれる。 バッチ用と割り切っていいんじゃないでしょうか。テンプレートではここを抜けないようにwhile(true)で実装されている。懐かしいクラウドサービスのWorkerRoleと似ている。 別に実装は必須じゃない。 中止、停止イベント通知を受け取る用仮想メソッド OnAbort, OnCloseASync, OnOpenASync(RunASyncとほとんど同じだが、 初期化に失敗したら処理中止、ということができる)
#47
OpenASyncの戻り値でなんでリスニングポイント返すのか? これが重要なのは、サービスのアドレスが静的でないためです。リソースの分散と可用性のために、サービスはクラスター内を移動します。これは、クライアントがサービスのリッスンしているアドレスを解決できるようにするメカニズムです。 ホスト名はFabricRuntimクラスから取得できるFabricRuntime.GetNodeContext().IPAddressOrFQDN
Download