SlideShare a Scribd company logo
1 of 75
「関心の分離」と「疎結合」
ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
About Me
Copyright 2017 @nuits_jp
中村 充志 / Atsushi Nakamura
• リコージャパン株式会社 金融事業部所属
• Enterprise系のITアーキテクト
• JavaからC#へ渡り歩く
• 趣味はXamarin
• Blog http://www.nuits.jp
• Blog(英語) https://blog.nuits.jp
• Twitter @nuits_jp
「関心の分離」と「疎結合」
Today’s Goal
1. ソフトウェア アーキテクチャの概略を理解いただく
2. 特に理解いただきたいこと
1. 関心(関心事)の分離
2. カプセル化
3. 密結合と疎結合
4. 疎結合を実現する代表的な手段
Today’s Goal
Xamarin.Forms NavigationOverview Slide 4
「関心の分離」と「疎結合」
アーキテクトとは?
アーキテクトとはなにか?
Slide 6Copyright 2017 @nuits_jp
class Class Model
ITアーキテクト
IT アーキテクチャ ≒ システム アーキテクチャ
設計・構築する
アプリケーション アーキテクチャ
(≒ソフトウェア アーキテクチャ)
インフラストラクチャ
アーキテクチャ
インテグレーション
アーキテクチャ
アーキテクトとはなにか?
Slide 7Copyright 2017 @nuits_jp
class Class Model
ITアーキテクト
IT アーキテクチャ ≒ システム アーキテクチャ
設計・構築する
アプリケーション アーキテクチャ
(≒ソフトウェア アーキテクチャ)
インフラストラクチャ
アーキテクチャ
インテグレーション
アーキテクチャ
「関心の分離」と「疎結合」
ソフトウェア アーキテクチャといえば何を思い浮かべますか?
Copyright 2017 @nuits_jp
1. MVC
2. MVP
3. MVVM
4. MVPVM
5. クリーン アーキテクチャ
6. レイヤー アーキテクチャ
7. オニオン アーキテクチャ
などなど
これらはソフトウェア アーキテクチャの類型的なパターン群です
ソフトウェア アーキテクチャといえば何を思い浮かべますか?
Copyright 2017 @nuits_jp Slide 9
ソフトウェア アーキテクチャとは何か?
ソフトウェアアーキテクチャでは、ソフトウェア システムの構成に関する一連
の重要な判断を網羅しています。これには、システムを構成する要素とイン
ターフェイスの選択、要素間のコラボレーションとして指定される動作、この
ような構成と動作の要素のより大きなサブシステムに対する構成、この構成の
指針となるアーキテクチャスタイルが含まれます。また、機能性、ユーザビリ
ティ、復元性、パフォーマンス、再利用性、理解できること、経済的な制約、
テクノロジの制約、トレードオフ、および外観への配慮も必要です。
by Philippe Kruchten, Grady Booch, Kurt Bittner, Rich Reitman
Microsoft 「アプリケーション アーキテクチャ ガイド2.0」より引用
Copyright 2017 @nuits_jp Slide 10
ソフトウェア アーキテクチャとは何か?
アーキテクチャは、システムを大きなレベルで分解したもので、決定事項の変
更は困難です。システムには複数のアーキテクチャが存在し、アーキテクチャ
にとって重要な事項はシステムの運用中に変化します。要するに、重要な要素
は、すべてアーキテクチャということになります。
by Martin Fowler
Microsoft 「アプリケーション アーキテクチャ ガイド2.0」より引用
Copyright 2017 @nuits_jp Slide 11
ソフトウェア アーキテクチャとは何か?
ソフトウェアアーキテクチャとは、抽象化と問題の分割によって複雑性を減ら
すことを主に念頭に置いたものである。ただし、今までのところ、「ソフト
ウェアアーキテクチャ」という用語に関して、万人が合意した厳密な定義は存
在しない
Wikipedia「ソフトウェアアーキテクチャ」より引用
Copyright 2017 @nuits_jp Slide 12
Slide 13Copyright 2017 @nuits_jp
とは言え、おおよその共通認識はある
1. ソフトウェアアーキテクチャとは
システムアーキテクチャのうち、ソフトウェア領域のアーキテク
チャである
この時「システム」とは「IT」だけではなく、それらを取り巻く
社会やビジネスを含めた「仕組み」を指すことも多い
※ 元来「System」とは制度・組織・体系・系統などのこと
ソフトウェア アーキテクチャとは何か?かみ砕くと…
Copyright 2017 @nuits_jp
2. ソフトウェア アーキテクチャとは
1. ソフトウェアにおける重要な決定事項全てである
2. その中でも特につぎの2点が重要
1. ソフトウェア全体を、どのように分割するか
2. 分割した部分同士を、どのように相互作用させるか
ソフトウェア アーキテクチャとは何か?かみ砕くと…
Copyright 2017 @nuits_jp
3. ソフトウェアアーキテクチャを構築するのはなぜか?
• 「システムの実現をサポートする」
• 「持続可能なソフトウェア」を
• 「バランスよく」構築するため
4. ソフトウェアアーキテクチャのバランスとは?
1. Quality(機能・非機能)
2. Cost
3. Delivery(開発期間)
特にアーキテクチャは非機能要求から受ける影響が大きい
ソフトウェア アーキテクチャとは何か?かみ砕くと…
Copyright 2017 @nuits_jp
「関心の分離」と「疎結合」
Again, today’s Goal
Copyright 2017 @nuits_jp
1. ソフトウェア アーキテクチャの概略を理解いただく
2. 特に理解いただきたいこと
1. 関心(関心事)の分離
2. カプセル化
3. 密結合と疎結合
4. 疎結合を実現する代表的な手段
Today’s Goal
Slide 18Xamarin.Forms NavigationOverview
1. ソフトウェア アーキテクチャの概略を理解いただく
2. 特に理解いただきたいこと
1. 関心(関心事)の分離
2. カプセル化
3. 密結合と疎結合
4. 疎結合を実現する代表的な手段
Today’s Goal
Slide 19Xamarin.Forms NavigationOverview
「関心の分離」と「疎結合」
関心(関心事)の分離
Copyright 2017 @nuits_jp
さて、アーキテクチャとは「どう分割し、どう結合するか」が重要
だとお話ししました。
その観点で非常に重要な概念として
Separation of Concerns(SoC):関心(関心事)の分離
という考え方があります。
プログラムは異なる関心事は、異なる部分に分離せよという設計原
則です。
Separation of Concerns
Copyright 2017 @nuits_jp
たとえば、MVC・MVP・MVVMなども、ある「何かと何か」の関心
を分離するための仕組みです。
MVC, MVP, MVVM, MVPVM, …
Slide 22Copyright 2017 @nuits_jp
Binding &
Command Update
NotificationNotification
MVC・MVP・MVVMなどはつぎの二つの関心事を分離するものです。
• プレゼンテーション
• プレゼンテーション以外
MVC, MVP, MVVM, MVPVM, …
Slide 23Copyright 2017 @nuits_jp
Binding &
Command Update
NotificationNotification
プレゼンテーション その他
いくつか明確な理由があります。
1. プレゼンテーションは専門性が高い
→プレゼンテーションのみを分業できる仕組みを用意したい
2. 一般的にコードによるテストが困難である
→プレゼンテーション以外はコードによるテストを行いたい
こう言った理由から、プレゼンテーションとそれ以外を分離して設計する
考え方を「Presentation Domain Separation(PDS)」と言います。
なぜプレゼンテーションを分離するのか?
Slide 24Copyright 2017 @nuits_jp
Slide 25
MVC, MVP, MVVM, MVPVM, … is PDS
Copyright 2017 @nuits_jp
Presentation Domain Separation:PDS
Slide 26
MVC, MVP, MVVM, MVPVM, … is PDS
Copyright 2017 @nuits_jp
Presentation Domain Separation:PDS
手段
目的
Slide 27
PDS is SoC
Copyright 2017 @nuits_jp
Presentation Domain Separation:PDS
Separation of Concerns:SoC
Slide 28
PDS is SoC
Copyright 2017 @nuits_jp
Presentation Domain Separation:PDS
Separation of Concerns:SoC
手段
目的
Slide 29Copyright 2017 @nuits_jp
プレゼンテーション以外の関心は?
多くのソフトウェアのプレゼンテーションと、それ以外の比率は
プレゼンテーション < それ以外
です。
ところで
Slide 30Copyright 2017 @nuits_jp
Binding &
Command Update
NotificationNotification
プレゼンテーション その他
Slide 31
これらの概念だけでは足りない
Copyright 2017 @nuits_jp
Presentation Domain Separation:PDS
Separation of Concerns:SoC
何かがここに必要!
何が必要なのか?
手段
目的
Slide 32Copyright 2017 @nuits_jp
ケースバイケースで銀の弾丸はない
1. Domain Driven Design(ドメイン駆動設計)
2. レイヤー アーキテクチャ
3. クリーン アーキテクチャ
4. Microsoft アプリケーション アーキテクチャ ガイド2.0
など
とはいえ参考となるものは存在する
Slide 33Copyright 2017 @nuits_jp
Slide 34Copyright 2017 @nuits_jp
ここからはモデルケースを見ながら進めます
【要求】
• 端末の位置情報を利用し、周辺のレストラン一覧を表示する
• レストラン情報は「リクルートWEBサービス」のグルメサーチ
APIを利用させていただく
https://webservice.recruit.co.jp/hotpepper/reference.html
• コンソールアプリケーションとして実装する
【制限事項】
• UnitTestの実装例はごく一部に限らせていただきます
【制限事項】
https://github.com/nuitsjp/SoC-and-Loosely-Coupled
題材
Slide 35Copyright 2017 @nuits_jp
関心の分離方針
Slide 36Copyright 2017 @nuits_jp
• プレゼンテーション層
• ユーザーインターフェース(コンソール)を
実現する
Presentation
• ビジネスロジック層
• ユースケース単位でクラスを分割
• 今回は「周辺のレストランを探す」ユース
ケースのみ
Usecase
• プログラム外との統合するための層
• 現在地座標の取得と、指定座標のレストラン
情報の取得の2種類に分割
Integration
全体としてはレイヤー アーキテクチャを採用
Slide 37Copyright 2017 @nuits_jp
それではコードを見てみましょう!
現在の構造
Slide 38Copyright 2017 @nuits_jp
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): GourmetSearchResult
GourmetService
+ SearchGourmetInfosAsync(): GourmetSearchResult
GeoCoordinator
Usecase
Integration
GourmetSearchResult
Slide 39Copyright 2017 @nuits_jp
NGポイント:関心の未分離
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): GourmetSearchResult
GourmetService
+ SearchGourmetInfosAsync(): GourmetSearchResult
GeoCoordinator
Usecase
Integration
GourmetSearchResult
NGポイント:関心の未分離
Slide 40Copyright 2017 @nuits_jp
Slide 41Copyright 2017 @nuits_jp
関心をカプセル化する
めざす姿
Slide 42Copyright 2017 @nuits_jp
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): IList<Restaurant>
GourmetService
+ SearchGourmetInfosAsync(): IList<GourmetInfo>
GeoCoordinator
Usecase
Integration
GourmetSearchResult
GourmetInfo
Restaurant
①
②
③
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): IList<Restaurant>
GourmetService
+ SearchGourmetInfosAsync(): IList<GourmetInfo>
GeoCoordinator
Usecase
Integration
GourmetSearchResult
GourmetInfo
Restaurant
現在の構造
Slide 43Copyright 2017 @nuits_jp
Slide 44Copyright 2017 @nuits_jp
NGポイント:密結合
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): IList<Restaurant>
GourmetService
+ SearchGourmetInfosAsync(): IList<GourmetInfo>
GeoCoordinator
Usecase
Integration
GourmetSearchResult
GourmetInfo
Restaurant
NGポイント:密結合
Slide 45Copyright 2017 @nuits_jp
NGポイント:密結合
Slide 46Copyright 2017 @nuits_jp
• クラスとクラスが直接依存関係にある
• 各レイヤー間が密結合状態となっている
class Class Model
FindRestaurants
+ FindNearbyRestaurantsAsync(): IList<Restaurant>
GourmetService
+ SearchGourmetInfosAsync(): IList<GourmetInfo>
new
use
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): IList<Restaurant>
GourmetService
+ SearchGourmetInfosAsync(): IList<GourmetInfo>
GeoCoordinator
Usecase
Integration
GourmetSearchResult
GourmetInfo
Restaurant
NGポイント:密結合
Slide 47Copyright 2017 @nuits_jp
一般論
• 利用者側が、依存先の影響を強く受ける
• 結果、保守性・拡張性が低下する
なぜ密結合が悪いのか?
Slide 48Copyright 2017 @nuits_jp
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): IList<Restaurant>
GourmetService
+ SearchGourmetInfosAsync(): IList<GourmetInfo>
GeoCoordinator
Usecase
Integration
GourmetSearchResult
GourmetInfo
Restaurant
NGポイント:密結合
Slide 49Copyright 2017 @nuits_jp
class Class Model
Presentation
RestauranListConsole
FindRestaurants
+ FindNearbyRestaurantsAsync(): IList<Restaurant>
GourmetService
+ SearchGourmetInfosAsync(): IList<GourmetInfo>
GeoCoordinator
Usecase
Integration
GourmetSearchResult
GourmetInfo
Restaurant
NGポイント:密結合
Slide 50Copyright 2017 @nuits_jp
Slide 51Copyright 2017 @nuits_jp
閑話:UnitTest
class Class Model
テストコード テスト対象 依存先
テストが難しいクラス
Slide 52Copyright 2017 @nuits_jp
class Class Model
テストコード テスト対象 依存先
テストが難しいクラス
Slide 53Copyright 2017 @nuits_jp
class Class Model
テストコード テスト対象 依存先
テストが難しいクラス
Slide 54Copyright 2017 @nuits_jp
• 依存先がテストを困難にする要素を持っている
• 時間
• 位置情報
• ネットワーク
• 大量の再依存クラス
• など
依存先を置き換え可能にする
Slide 55Copyright 2017 @nuits_jp
class Class Model
テストコード テスト対象
依存先
«interface»
依存先
テスト用の偽物
依存先を置き換え可能にする
Slide 56Copyright 2017 @nuits_jp
class Class Model
テストコード テスト対象
依存先
«interface»
依存先
テスト用の偽物
依存先を置き換え可能にする
Slide 57Copyright 2017 @nuits_jp
class Class Model
テストコード テスト対象
依存先
«interface»
依存先
テスト用の偽物
Driver
依存先を置き換え可能にする
Slide 58Copyright 2017 @nuits_jp
class Class Model
テストコード テスト対象
依存先
«interface»
依存先
テスト用の偽物
Stub
Fake
Mock
Slide 59Copyright 2017 @nuits_jp
閑話終了 疎結合を目指す
class Class Model
FindRestaurants
+ FindNearbyRestaurantsAsync()
GourmetService
+ SearchGourmetInfosAsync()
«interface»
IGourmetService
+ SearchGourmetInfosAsync()
疎結合を実現する
Slide 60Copyright 2017 @nuits_jp
利用者がインターフェースにのみ
依存している状態を目指す
Slide 61Copyright 2017 @nuits_jp
疎結合の実現 その1 インターフェースの抽出
class Class Model
FindRestaurants
+ FindNearbyRestaurantsAsync()
GourmetService
+ SearchGourmetInfosAsync()
«interface»
IGourmetService
+ SearchGourmetInfosAsync()
new
use
インターフェースの抽出結果
Slide 62Copyright 2017 @nuits_jp
利用箇所の依存性は分離できたが
インスタンス生成箇所がクラスに
依存している。
1. Dependency Injectionパターン
2. Service Locatorパターン
解決方法は二つ
Slide 63Copyright 2017 @nuits_jp
1. Dependency Injectionパターン
2. Service Locatorパターン
解決方法は二つ
Slide 64Copyright 2017 @nuits_jp
class Class Model
FindRestaurants
+ FindNearbyRestaurantsAsync()
GourmetService
+ SearchGourmetInfosAsync()
«interface»
IGourmetService
+ SearchGourmetInfosAsync()
new
use
インターフェースの抽出結果
Slide 65Copyright 2017 @nuits_jp
利用箇所の依存性は分離できたが
インスタンス生成箇所がクラスに
依存している。
Slide 66Copyright 2017 @nuits_jp
疎結合の実現 その2 依存性の注入
疎結合の実現
Slide 67Copyright 2017 @nuits_jp
class Class Model
FindRestaurants
+ FindNearbyRestaurantsAsync()
GourmetService
+ SearchGourmetInfosAsync()
«interface»
IGourmetService
+ SearchGourmetInfosAsync()
Program
injection
new
use
Slide 68Copyright 2017 @nuits_jp
UnitTestを書いてみよう!
Slide 69Copyright 2017 @nuits_jp
Dependency Injection 面倒ですよね?
Slide 70Copyright 2017 @nuits_jp
Dependency Injection Containerを使おう!
「関心の分離」と「疎結合」
まとめ
Copyright 2017 @nuits_jp
1. ソフトウェア アーキテクチャとは
1. 重要な決定事項の全てがアーキテクチャ
2. 特にその中でも次の2点が重要
1. 全体をどう部分に分割するか
2. ソフトウェア内部と外部、部分と部分をどう結合し、どう
相互作用させるか
まとめ ①
Copyright 2017 @nuits_jp
1. 関心の分離
分割する際「関心の分離(SoC)」を実現すること
2. カプセル化
分割された対象は、依存先の関心を内部にカプセル化すること
3. 密結合と疎結合
分割された対象間は、密結合しないよう疎結合を保つこと
4. 疎結合を実現する代表的な手段
インターフェースを活用し疎結合を実現すること
その際、結合はDependency Injection Patternなどを利用すること
まとめ ②
Copyright 2017 @nuits_jp
これらを実践するにあたり、いくつかのツールを紹介した
• UnitTestの実施
→ UnitTest Frameworkを利用しよう
• UnitTest時のMockについて
→ Mock生成をサポートするライブラリを使おう
• Dependency Injection Pattern
→ Dependency Injection Containerを使うと良い
まとめ ③
Slide 74Copyright 2017 @nuits_jp
ThankYou!
Any Questions?

More Related Content

What's hot

ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveTokoroten Nakayama
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込むYoshiki Hayama
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 

What's hot (20)

ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 

Similar to 「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら

マイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャーマイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャーTsukasa Kato
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたYasuharu Seki
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるのYoshitaka Seo
 
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わるXpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わるKazunori Tatsuki
 
デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択
デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択
デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択Shingo Kitayama
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Atsushi Nakamura
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Atsushi Nakamura
 
Microsoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめMicrosoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめTomomitsuKusaba
 
Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Shinya Nakajima
 
詳細設計とアプリケーション開発工程
詳細設計とアプリケーション開発工程詳細設計とアプリケーション開発工程
詳細設計とアプリケーション開発工程康 新谷
 
スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話Keigo Suda
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能TomomitsuKusaba
 
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しようVisual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しようShinya Nakajima
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能TomomitsuKusaba
 
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...典子 松本
 
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployするDeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployするtomohiro kato
 
Elastic Team Building
Elastic Team BuildingElastic Team Building
Elastic Team BuildingYuki Nanri
 
社内 DDD 勉強会 #2
社内 DDD 勉強会 #2社内 DDD 勉強会 #2
社内 DDD 勉強会 #2shingo suzuki
 

Similar to 「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら (20)

マイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャーマイクロサービスとそれを支えるアーキテクチャー
マイクロサービスとそれを支えるアーキテクチャー
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるの
 
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わるXpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わる
 
デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択
デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択
デブサミ2017【17-E-5】エンタープライズにおけるDevOpsの実態!Cloud Native Application Platformの選択
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
 
Ms retail update ra 20191030
Ms retail update ra 20191030Ms retail update ra 20191030
Ms retail update ra 20191030
 
Microsoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめMicrosoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめ
 
Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)
 
詳細設計とアプリケーション開発工程
詳細設計とアプリケーション開発工程詳細設計とアプリケーション開発工程
詳細設計とアプリケーション開発工程
 
スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しようVisual Studio App CenterでAndroid開発にCI/CDを導入しよう
Visual Studio App CenterでAndroid開発にCI/CDを導入しよう
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
 
.NET Lab2022年2月
.NET Lab2022年2月.NET Lab2022年2月
.NET Lab2022年2月
 
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
 
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployするDeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする
 
Elastic Team Building
Elastic Team BuildingElastic Team Building
Elastic Team Building
 
社内 DDD 勉強会 #2
社内 DDD 勉強会 #2社内 DDD 勉強会 #2
社内 DDD 勉強会 #2
 

More from Atsushi Nakamura

Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトSettings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトAtsushi Nakamura
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021Atsushi Nakamura
 
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Atsushi Nakamura
 
世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョン世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョンAtsushi Nakamura
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-previewAtsushi Nakamura
 
世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1Atsushi Nakamura
 
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考えるAtsushi Nakamura
 
継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版Atsushi Nakamura
 
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるα版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるAtsushi Nakamura
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そうAtsushi Nakamura
 
Old:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうOld:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうAtsushi Nakamura
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overviewAtsushi Nakamura
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そうAtsushi Nakamura
 
Blue monkey architecture overview
Blue monkey architecture overviewBlue monkey architecture overview
Blue monkey architecture overviewAtsushi Nakamura
 
Xamarin Dev days 2 xamarin.forms ja
Xamarin Dev days 2   xamarin.forms jaXamarin Dev days 2   xamarin.forms ja
Xamarin Dev days 2 xamarin.forms jaAtsushi Nakamura
 
Why prism for xamarin.forms
Why prism for xamarin.formsWhy prism for xamarin.forms
Why prism for xamarin.formsAtsushi Nakamura
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Atsushi Nakamura
 

More from Atsushi Nakamura (17)

Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフトSettings SyncとCodespaceで体験する新世代へのパラダイムシフト
Settings SyncとCodespaceで体験する新世代へのパラダイムシフト
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
Unicodeで半角全角を扱うAmbiguous(曖昧さ)とUncertainty(不確実性)の恐怖
 
世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョン世界一わかりやすいClean Architecture - DroidKaigiバージョン
世界一わかりやすいClean Architecture - DroidKaigiバージョン
 
世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview世界一わかりやすいClean Architecture release-preview
世界一わかりやすいClean Architecture release-preview
 
世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1世界一わかりやすいClean Architecture alpha-1
世界一わかりやすいClean Architecture alpha-1
 
継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える継続的にテスト可能な設計を考える
継続的にテスト可能な設計を考える
 
継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版継続的にテスト可能な設計を考える ベータ版
継続的にテスト可能な設計を考える ベータ版
 
α版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考えるα版 継続的にテスト可能な設計を考える
α版 継続的にテスト可能な設計を考える
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
 
Old:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そうOld:App center analyticsを使い倒そう
Old:App center analyticsを使い倒そう
 
Xamarin.forms navigation overview
Xamarin.forms navigation overviewXamarin.forms navigation overview
Xamarin.forms navigation overview
 
App center analyticsを使い倒そう
App center analyticsを使い倒そうApp center analyticsを使い倒そう
App center analyticsを使い倒そう
 
Blue monkey architecture overview
Blue monkey architecture overviewBlue monkey architecture overview
Blue monkey architecture overview
 
Xamarin Dev days 2 xamarin.forms ja
Xamarin Dev days 2   xamarin.forms jaXamarin Dev days 2   xamarin.forms ja
Xamarin Dev days 2 xamarin.forms ja
 
Why prism for xamarin.forms
Why prism for xamarin.formsWhy prism for xamarin.forms
Why prism for xamarin.forms
 
Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性Enterpriseから見たXamarinの可能性
Enterpriseから見たXamarinの可能性
 

「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら