SlideShare a Scribd company logo
1 of 12
Download to read offline
Clean
Architecture
第Ⅴ部
アーキテクチャ Part1
前回まとめ
- コンポーネント
- コンポーネントとはデプロイ単位のことである
- 優秀なコンポーネントは常に個別にデプロイができる状態を保っている
- コンポーネントの凝縮性
- 再利用・リリース等価の原則( REP)
- 閉鎖性共通の原則( CCP)
- 全再利用の原則( CRP)
- コンポーネントの結合
- 非循環依存関係の原則( ADP)
- 安定依存の原則( SDP)
- 安定度・抽象度等価の原則( SAP)
- アーキテクチャとは?
- 独立性
第Ⅴ部:アーキテクチャ Part1
第1章:アーキテクチャとは?
- ソフトウェアアーキテクチャとはプログラマである
- コードを書かずより高いレベルの問題にフォーカスするというのは間違い
- 自分で課題を経験し、生産性を最大化する設計にチームを導いて行くための「形状」
- ソフトウェアシステムの開発・デプロイ・運用・保守を容易にすること
第1章:アーキテクチャとは?
開発
- 開発が難しいソフトウェアシステムは健全である可能性が低い
- チームの構成が違えば、アーキテクチャの決定も異なる
第1章:アーキテクチャとは?
デプロイ/運用/保守
- デプロイ
- デプロイのコストが高ければその分だけシステムの有用性は低下する
- 運用
- アーキテクチャが優れていれば、システムの運用方法は開発者が見ればすぐにわかる
- 保守
- 保守は最もコストがかかる
- 既存のシステムを掘り起こし意図しない欠陥を生み出す可能性
- つまり
- 優れたアーキテクトは、方針と詳細を区別して詳細の決定をできるだけ延期・留保できる
第2章:独立性
- 優れたアーキテクチャは以下の事をサポートする
- システムのユースケース
- システムの運用
- システムの開発
- システムのデプロイ
第2章:独立性
ユースケース/運用/開発/デプロイ
- ユースケース
- 「ユースケース」とはアーキテクチャがシステムの意図をサポートする
- 優れたアーキテクチャを備えたカートはアプリケーションのように見える
- アーキテクチャがシステムの振る舞いに大きな影響を与えることはない
- 運用
- 運用に対してのアーキテクチャは本質的な役割を果たす
- ユースケースに対しての処理能力をサポートしなければいけない
- 優れたアーキテクトであればこれらの決定を選択肢として残せる
- 開発
- アーキテクチャは開発環境のサポートでは非常に重要な役割
- それぞれのチーム行動を独立させるアーキテクチャシステムを持たせる
- デプロイ
- アーキテクチャはデプロイの手軽さの決定にも役割がある
- 目指すべきは、変更に依存しない「即時デプロイ」
第2章:独立性
レイヤーの切り離し/ユースケースの切り離し
- レイヤーの切り離し
- ユーザーインターフェイスを変更する理由は、ビジネスルールを変更する理由とは別である
- ユースケースの UI部分とビジネスルールを分離する
- ビジネスルールの appに密接した部分とそうでない部分は分離する
- システムは切り離された水平レイヤーで分割されている
- ユースケースの切り離し
- ユースケースはシステムを分割する自然な方法
- 注文入力システムに注文を追加するユースケースは、削除するユースケースと、異なる理由と頻度
で変更されるので、分離する
- それぞれのユースケースは、 UIの一部/ビジネスルールの一部 /DB機能の一部を使用し、それらを
薄く垂直にユースケースとして分割する
- 変更する理由の違いでシステムの要素を切り離しておくと、古いユースケースに影響を与えずに新し
いユースケースを追加できる
第2章:独立性
独立した開発/独立デプロイ/重複
- 独立した開発が可能
- コンポーネントが明確に切り離されていれば、チーム同士の干渉は緩和される
- ユースケースがお互いに切り離されていれば、注文追加にフォーカスしたチームが、注文削除に
フォーカスしたチームへ影響を与えることはない
- 独立デプロイの可能性
- レイヤーやユースケースが切り離されていれば、デプロイの柔軟性も高まる
- 重複
- 「本物の重複」と「偽物の重複」があり見極めが必要
- ポイントは「変更頻度と変更理由」
- DBのレコード構造がある画面のデータ構造と似ているケースは、ほぼ「偽物の重複」である
第2章:独立性
切り離し方式のレベル
- ソースレベル
- あるモジュールに対する変更が、他のモジュールの変更や再コンパイルにつながらないよう、ソース
コードモジュール間の依存性を管理する (Gemなど)
- コンポーネントは全て同じアドレス空間で実行される
- コンポーネント間の通信は、単純な関数呼び出しを使用し、 PCのメモリに読み込まれた単一の実行
ファイルが存在する (モノリシック構造 )
- デプロイレベル
- あるモジュールのソースコードに対する変更が、他のモジュールの再ビルドや再デプロイにつながら
ないように、デプロイ可能な単位の依存性を管理する (jarファイル/DLLなど)
- 多くのコンポーネントは同じアドレス空間に存在し、通信には関数呼び出しを使用する
- 重要なのは、コンポーネントが単独でデプロイ可能な単位 (jarファイル/Gemファイルなど)に分割され
ていること
- サービスレベル
- 依存性をデータ構造のレベルまで下げ、ネットワークパケットだけで通信する
- 全ての実行単位は完全に独立している
- ソースやバイナリを変更してもお互いに影響を与えることはない (サービスやマイクロサービスなど )
第Ⅳ部:Part1 まとめ
- アーキテクチャとは?
- コードを書かずより高いレベルの問題にフォーカスするというのは間違い
- ソフトウェアアーキテクチャとはプログラマである
- 自分で課題を経験し、生産性を最大化する設計にチームを導いて行くための「形状」
- ソフトウェアシステムの開発・デプロイ・運用・保守を容易にすること
- 独立性
- 優れたアーキテクチャは以下の事をサポートする
- システムのユースケース
- システムの運用
- システムの開発
- システムのデプロイ

More Related Content

Similar to 第ⅴ部:clean architecture アーキテクチャ Part1

最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17Masayoshi Kondo
 
2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...n-yuki
 
Continuous delivery 6
Continuous delivery 6Continuous delivery 6
Continuous delivery 6ShinyaOzawa
 
Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要
Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要
Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要オラクルエンジニア通信
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeKen Morishita
 
Mk network programmability-03
Mk network programmability-03Mk network programmability-03
Mk network programmability-03Miya Kohno
 

Similar to 第ⅴ部:clean architecture アーキテクチャ Part1 (6)

最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
 
2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...
 
Continuous delivery 6
Continuous delivery 6Continuous delivery 6
Continuous delivery 6
 
Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要
Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要
Oracle Data Minerハンズオンセミナー170927:①Oracle 機械学習概要
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
Mk network programmability-03
Mk network programmability-03Mk network programmability-03
Mk network programmability-03
 

More from tak

可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)tak
 
可読性について リーダブルコード Part4(優れたテストコード1)
可読性について リーダブルコード Part4(優れたテストコード1)可読性について リーダブルコード Part4(優れたテストコード1)
可読性について リーダブルコード Part4(優れたテストコード1)tak
 
可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)tak
 
可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)tak
 
可読性について リーダブルコード part1(表面上の改善)
可読性について リーダブルコード part1(表面上の改善)可読性について リーダブルコード part1(表面上の改善)
可読性について リーダブルコード part1(表面上の改善)tak
 
DiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみたDiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみたtak
 
TypeScriptのdecoratorについて
TypeScriptのdecoratorについてTypeScriptのdecoratorについて
TypeScriptのdecoratorについてtak
 
Rust + web assemblyやってみた
Rust + web assemblyやってみたRust + web assemblyやってみた
Rust + web assemblyやってみたtak
 
第ⅴ部:clean architecture アーキテクチャ Part5
第ⅴ部:clean architecture アーキテクチャ Part5第ⅴ部:clean architecture アーキテクチャ Part5
第ⅴ部:clean architecture アーキテクチャ Part5tak
 
第ⅴ部:clean architecture アーキテクチャ Part3
第ⅴ部:clean architecture アーキテクチャ Part3第ⅴ部:clean architecture アーキテクチャ Part3
第ⅴ部:clean architecture アーキテクチャ Part3tak
 
第ⅴ部:clean architecture アーキテクチャ Part2
第ⅴ部:clean architecture アーキテクチャ Part2第ⅴ部:clean architecture アーキテクチャ Part2
第ⅴ部:clean architecture アーキテクチャ Part2tak
 
第ⅲ部:Clean architecture 設計の原則
第ⅲ部:Clean architecture 設計の原則第ⅲ部:Clean architecture 設計の原則
第ⅲ部:Clean architecture 設計の原則tak
 
第ⅱ部:Clean architecture 構成要素から始めよ
第ⅱ部:Clean architecture 構成要素から始めよ第ⅱ部:Clean architecture 構成要素から始めよ
第ⅱ部:Clean architecture 構成要素から始めよtak
 
第ⅰ部:Clean Architecture イントロダクション
第ⅰ部:Clean Architecture イントロダクション第ⅰ部:Clean Architecture イントロダクション
第ⅰ部:Clean Architecture イントロダクションtak
 

More from tak (14)

可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)可読性について リーダブルコード Part5(優れたテストコード2)
可読性について リーダブルコード Part5(優れたテストコード2)
 
可読性について リーダブルコード Part4(優れたテストコード1)
可読性について リーダブルコード Part4(優れたテストコード1)可読性について リーダブルコード Part4(優れたテストコード1)
可読性について リーダブルコード Part4(優れたテストコード1)
 
可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)
 
可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)
 
可読性について リーダブルコード part1(表面上の改善)
可読性について リーダブルコード part1(表面上の改善)可読性について リーダブルコード part1(表面上の改善)
可読性について リーダブルコード part1(表面上の改善)
 
DiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみたDiI/DIコンテナを一から学んでみた
DiI/DIコンテナを一から学んでみた
 
TypeScriptのdecoratorについて
TypeScriptのdecoratorについてTypeScriptのdecoratorについて
TypeScriptのdecoratorについて
 
Rust + web assemblyやってみた
Rust + web assemblyやってみたRust + web assemblyやってみた
Rust + web assemblyやってみた
 
第ⅴ部:clean architecture アーキテクチャ Part5
第ⅴ部:clean architecture アーキテクチャ Part5第ⅴ部:clean architecture アーキテクチャ Part5
第ⅴ部:clean architecture アーキテクチャ Part5
 
第ⅴ部:clean architecture アーキテクチャ Part3
第ⅴ部:clean architecture アーキテクチャ Part3第ⅴ部:clean architecture アーキテクチャ Part3
第ⅴ部:clean architecture アーキテクチャ Part3
 
第ⅴ部:clean architecture アーキテクチャ Part2
第ⅴ部:clean architecture アーキテクチャ Part2第ⅴ部:clean architecture アーキテクチャ Part2
第ⅴ部:clean architecture アーキテクチャ Part2
 
第ⅲ部:Clean architecture 設計の原則
第ⅲ部:Clean architecture 設計の原則第ⅲ部:Clean architecture 設計の原則
第ⅲ部:Clean architecture 設計の原則
 
第ⅱ部:Clean architecture 構成要素から始めよ
第ⅱ部:Clean architecture 構成要素から始めよ第ⅱ部:Clean architecture 構成要素から始めよ
第ⅱ部:Clean architecture 構成要素から始めよ
 
第ⅰ部:Clean Architecture イントロダクション
第ⅰ部:Clean Architecture イントロダクション第ⅰ部:Clean Architecture イントロダクション
第ⅰ部:Clean Architecture イントロダクション
 

第ⅴ部:clean architecture アーキテクチャ Part1