Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clean_Architecture輪読会_6.pdf

 Clean_Architecture輪読会_6.pdf

kojirock5260

February 18, 2020
Tweet

More Decks by kojirock5260

Other Decks in Technology

Transcript

  1. Clean Architecture 輪読会#6 Clean Architecture 輪読会#6 Clean Architecture 輪読会#6 Clean

    Architecture 輪読会#6 Clean Architecture 輪読会#6 Clean Architecture 輪読会#6 2020/02/18 2020/02/18 2020/02/18 2020/02/18 2020/02/18 2020/02/18 1 / 17
  2. 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15

    章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? アーキテクチャの形状の目的は、そこに含まれるソフトウェアシステム アーキテクチャの形状の目的は、そこに含まれるソフトウェアシステム アーキテクチャの形状の目的は、そこに含まれるソフトウェアシステム アーキテクチャの形状の目的は、そこに含まれるソフトウェアシステム アーキテクチャの形状の目的は、そこに含まれるソフトウェアシステム アーキテクチャの形状の目的は、そこに含まれるソフトウェアシステム の の の の の の 開発・デプロイ・運用・保守 開発・デプロイ・運用・保守 開発・デプロイ・運用・保守 開発・デプロイ・運用・保守 開発・デプロイ・運用・保守 開発・デプロイ・運用・保守 を容易にすることである。それらを容易 を容易にすることである。それらを容易 を容易にすることである。それらを容易 を容易にすることである。それらを容易 を容易にすることである。それらを容易 を容易にすることである。それらを容易 にするためにの戦略は、できるだけ長い期間、できるだけ多く にするためにの戦略は、できるだけ長い期間、できるだけ多く にするためにの戦略は、できるだけ長い期間、できるだけ多く にするためにの戦略は、できるだけ長い期間、できるだけ多く にするためにの戦略は、できるだけ長い期間、できるだけ多く にするためにの戦略は、できるだけ長い期間、できるだけ多く選択肢を 選択肢を 選択肢を 選択肢を 選択肢を 選択肢を 残すこと 残すこと 残すこと 残すこと 残すこと 残すことである。 である。 である。 である。 である。 である。 2 / 17
  3. 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15

    章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 開発 開発 開発 開発 開発 開発 開発チームの規模や、開発段階によって、考慮しなくてはならないア 開発チームの規模や、開発段階によって、考慮しなくてはならないア 開発チームの規模や、開発段階によって、考慮しなくてはならないア 開発チームの規模や、開発段階によって、考慮しなくてはならないア 開発チームの規模や、開発段階によって、考慮しなくてはならないア 開発チームの規模や、開発段階によって、考慮しなくてはならないア ーキテクチャは異なる ーキテクチャは異なる ーキテクチャは異なる ーキテクチャは異なる ーキテクチャは異なる ーキテクチャは異なる       3 / 17
  4. 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15

    章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? デプロイ デプロイ デプロイ デプロイ デプロイ デプロイ 開発の早い段階から、アーキテクトがデプロイの問題について考える 開発の早い段階から、アーキテクトがデプロイの問題について考える 開発の早い段階から、アーキテクトがデプロイの問題について考える 開発の早い段階から、アーキテクトがデプロイの問題について考える 開発の早い段階から、アーキテクトがデプロイの問題について考える 開発の早い段階から、アーキテクトがデプロイの問題について考える ことが大事。 ことが大事。 ことが大事。 ことが大事。 ことが大事。 ことが大事。       4 / 17
  5. 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15

    章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 運用 運用 運用 運用 運用 運用 運用の問題はお金で殴れば解決できることが往々にしてある。 運用の問題はお金で殴れば解決できることが往々にしてある。 運用の問題はお金で殴れば解決できることが往々にしてある。 運用の問題はお金で殴れば解決できることが往々にしてある。 運用の問題はお金で殴れば解決できることが往々にしてある。 運用の問題はお金で殴れば解決できることが往々にしてある。 運用におけるアーキテクチャの役割は、システムの運用ニーズを伝え 運用におけるアーキテクチャの役割は、システムの運用ニーズを伝え 運用におけるアーキテクチャの役割は、システムの運用ニーズを伝え 運用におけるアーキテクチャの役割は、システムの運用ニーズを伝え 運用におけるアーキテクチャの役割は、システムの運用ニーズを伝え 運用におけるアーキテクチャの役割は、システムの運用ニーズを伝え ること。 ること。 ること。 ること。 ること。 ること。             5 / 17
  6. 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15

    章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 保守 保守 保守 保守 保守 保守 アーキテクチャを慎重に考えることで、保守時に発生するリスクを大 アーキテクチャを慎重に考えることで、保守時に発生するリスクを大 アーキテクチャを慎重に考えることで、保守時に発生するリスクを大 アーキテクチャを慎重に考えることで、保守時に発生するリスクを大 アーキテクチャを慎重に考えることで、保守時に発生するリスクを大 アーキテクチャを慎重に考えることで、保守時に発生するリスクを大 幅に軽減できる 幅に軽減できる 幅に軽減できる 幅に軽減できる 幅に軽減できる 幅に軽減できる       6 / 17
  7. 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 15

    章 アーキテクチャとは? 15 章 アーキテクチャとは? 15 章 アーキテクチャとは? 選択肢を残しておく 選択肢を残しておく 選択肢を残しておく 選択肢を残しておく 選択肢を残しておく 選択肢を残しておく DB やフレームワークなどの詳細な技術の決定を初期段階で下す必要は DB やフレームワークなどの詳細な技術の決定を初期段階で下す必要は DB やフレームワークなどの詳細な技術の決定を初期段階で下す必要は DB やフレームワークなどの詳細な技術の決定を初期段階で下す必要は DB やフレームワークなどの詳細な技術の決定を初期段階で下す必要は DB やフレームワークなどの詳細な技術の決定を初期段階で下す必要は ない。 ない。 ない。 ない。 ない。 ない。 会社ですでに決定しているものがあった場合、優秀なアーキテクトなら 会社ですでに決定しているものがあった場合、優秀なアーキテクトなら 会社ですでに決定しているものがあった場合、優秀なアーキテクトなら 会社ですでに決定しているものがあった場合、優秀なアーキテクトなら 会社ですでに決定しているものがあった場合、優秀なアーキテクトなら 会社ですでに決定しているものがあった場合、優秀なアーキテクトなら ば、 ば、 ば、 ば、 ば、 ば、まだ決まっていないと主張する まだ決まっていないと主張する まだ決まっていないと主張する まだ決まっていないと主張する まだ決まっていないと主張する まだ決まっていないと主張する 7 / 17
  8. 16 章 独立性 16 章 独立性 16 章 独立性 16

    章 独立性 16 章 独立性 16 章 独立性 システムのユースケース システムのユースケース システムのユースケース システムのユースケース システムのユースケース システムのユースケース システムの運用 システムの運用 システムの運用 システムの運用 システムの運用 システムの運用 システムの開発 システムの開発 システムの開発 システムの開発 システムの開発 システムの開発 システムのデプロイ システムのデプロイ システムのデプロイ システムのデプロイ システムのデプロイ システムのデプロイ                         8 / 17
  9. 独立性 独立性 独立性 独立性 独立性 独立性 システムのユースケース システムのユースケース システムのユースケース システムのユースケース

    システムのユースケース システムのユースケース アーキテクチャレベルでシステムの意図がわかるように、 アーキテクチャレベルでシステムの意図がわかるように、 アーキテクチャレベルでシステムの意図がわかるように、 アーキテクチャレベルでシステムの意図がわかるように、 アーキテクチャレベルでシステムの意図がわかるように、 アーキテクチャレベルでシステムの意図がわかるように、振る舞いを 振る舞いを 振る舞いを 振る舞いを 振る舞いを 振る舞いを 明らかに 明らかに 明らかに 明らかに 明らかに 明らかにすることである。 することである。 することである。 することである。 することである。 することである。       9 / 17
  10. 独立性 独立性 独立性 独立性 独立性 独立性 システムの運用 システムの運用 システムの運用 システムの運用

    システムの運用 システムの運用 システムの要求する技術に対しての解決策をすぐに決定せず システムの要求する技術に対しての解決策をすぐに決定せず システムの要求する技術に対しての解決策をすぐに決定せず システムの要求する技術に対しての解決策をすぐに決定せず システムの要求する技術に対しての解決策をすぐに決定せず システムの要求する技術に対しての解決策をすぐに決定せず選択肢 選択肢 選択肢 選択肢 選択肢 選択肢 として残しておく。 として残しておく。 として残しておく。 として残しておく。 として残しておく。 として残しておく。       10 / 17
  11. 独立性 独立性 独立性 独立性 独立性 独立性 システムの開発 システムの開発 システムの開発 システムの開発

    システムの開発 システムの開発 アーキテクチャは開発環境のサポートにおいて、 アーキテクチャは開発環境のサポートにおいて、 アーキテクチャは開発環境のサポートにおいて、 アーキテクチャは開発環境のサポートにおいて、 アーキテクチャは開発環境のサポートにおいて、 アーキテクチャは開発環境のサポートにおいて、非常に重要な役割 非常に重要な役割 非常に重要な役割 非常に重要な役割 非常に重要な役割 非常に重要な役割を を を を を を 果たす 果たす 果たす 果たす 果たす 果たす コンウェイの法則 コンウェイの法則 コンウェイの法則 コンウェイの法則 コンウェイの法則 コンウェイの法則             11 / 17
  12. 独立性 独立性 独立性 独立性 独立性 独立性 システムのデプロイ システムのデプロイ システムのデプロイ システムのデプロイ

    システムのデプロイ システムのデプロイ 目標にすべきは 目標にすべきは 目標にすべきは 目標にすべきは 目標にすべきは 目標にすべきは即時デプロイ 即時デプロイ 即時デプロイ 即時デプロイ 即時デプロイ 即時デプロイ 適切なコンポーネント分割が重要 適切なコンポーネント分割が重要 適切なコンポーネント分割が重要 適切なコンポーネント分割が重要 適切なコンポーネント分割が重要 適切なコンポーネント分割が重要             12 / 17
  13. 独立性 独立性 独立性 独立性 独立性 独立性 選択肢を残しておく 選択肢を残しておく 選択肢を残しておく 選択肢を残しておく

    選択肢を残しておく 選択肢を残しておく 前述4 つのすべてを満足させる方法は非常に難しい 前述4 つのすべてを満足させる方法は非常に難しい 前述4 つのすべてを満足させる方法は非常に難しい 前述4 つのすべてを満足させる方法は非常に難しい 前述4 つのすべてを満足させる方法は非常に難しい 前述4 つのすべてを満足させる方法は非常に難しい ただし、上手くバランスを取る方法も存在する ただし、上手くバランスを取る方法も存在する ただし、上手くバランスを取る方法も存在する ただし、上手くバランスを取る方法も存在する ただし、上手くバランスを取る方法も存在する ただし、上手くバランスを取る方法も存在する             13 / 17
  14. 独立性 独立性 独立性 独立性 独立性 独立性 重複 重複 重複 重複

    重複 重複 本当の重複と偶然の重複を見極めることが重要 本当の重複と偶然の重複を見極めることが重要 本当の重複と偶然の重複を見極めることが重要 本当の重複と偶然の重複を見極めることが重要 本当の重複と偶然の重複を見極めることが重要 本当の重複と偶然の重複を見極めることが重要       14 / 17
  15. 独立性 独立性 独立性 独立性 独立性 独立性 切り離し 切り離し 切り離し 切り離し

    切り離し 切り離し レイヤーの切り離し レイヤーの切り離し レイヤーの切り離し レイヤーの切り離し レイヤーの切り離し レイヤーの切り離し UI, DB, ビジネスロジックなど UI, DB, ビジネスロジックなど UI, DB, ビジネスロジックなど UI, DB, ビジネスロジックなど UI, DB, ビジネスロジックなど UI, DB, ビジネスロジックなど ユースケースの切り離し ユースケースの切り離し ユースケースの切り離し ユースケースの切り離し ユースケースの切り離し ユースケースの切り離し 使用頻度・理由など 使用頻度・理由など 使用頻度・理由など 使用頻度・理由など 使用頻度・理由など 使用頻度・理由など 切り離しレベル 切り離しレベル 切り離しレベル 切り離しレベル 切り離しレベル 切り離しレベル ソースコード、デプロイ、サービス ソースコード、デプロイ、サービス ソースコード、デプロイ、サービス ソースコード、デプロイ、サービス ソースコード、デプロイ、サービス ソースコード、デプロイ、サービス 切り離しの方式も 切り離しの方式も 切り離しの方式も 切り離しの方式も 切り離しの方式も 切り離しの方式も 選択肢を残すための技の一つ 選択肢を残すための技の一つ 選択肢を残すための技の一つ 選択肢を残すための技の一つ 選択肢を残すための技の一つ 選択肢を残すための技の一つ                                     15 / 17
  16. 17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く

    17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く ソフトウェアの要素を分離し、お互いのことがわからないように制限 ソフトウェアの要素を分離し、お互いのことがわからないように制限 ソフトウェアの要素を分離し、お互いのことがわからないように制限 ソフトウェアの要素を分離し、お互いのことがわからないように制限 ソフトウェアの要素を分離し、お互いのことがわからないように制限 ソフトウェアの要素を分離し、お互いのことがわからないように制限 するというもの するというもの するというもの するというもの するというもの するというもの ビジネス要件とは関係のない決定を境界線を引くことで先延ばしに ビジネス要件とは関係のない決定を境界線を引くことで先延ばしに ビジネス要件とは関係のない決定を境界線を引くことで先延ばしに ビジネス要件とは関係のない決定を境界線を引くことで先延ばしに ビジネス要件とは関係のない決定を境界線を引くことで先延ばしに ビジネス要件とは関係のない決定を境界線を引くことで先延ばしに する する する する する する             16 / 17
  17. 17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く

    17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く 17 章 バウンダリー : 境界線を引く 境界線を引く 境界線を引く 境界線を引く 境界線を引く 境界線を引く 境界線を引く 境界線は 境界線は 境界線は 境界線は 境界線は 境界線は重要なもの( ビジネスルール) 重要なもの( ビジネスルール) 重要なもの( ビジネスルール) 重要なもの( ビジネスルール) 重要なもの( ビジネスルール) 重要なもの( ビジネスルール) と と と と と と重要ではないもの 重要ではないもの 重要ではないもの 重要ではないもの 重要ではないもの 重要ではないものの間に引 の間に引 の間に引 の間に引 の間に引 の間に引 く。 く。 く。 く。 く。 く。 UI がGUI でもCUI でもビジネスルールは変わらない UI がGUI でもCUI でもビジネスルールは変わらない UI がGUI でもCUI でもビジネスルールは変わらない UI がGUI でもCUI でもビジネスルールは変わらない UI がGUI でもCUI でもビジネスルールは変わらない UI がGUI でもCUI でもビジネスルールは変わらない DB がMysql でもPostgreSQL でもビジネスルールは変わらない DB がMysql でもPostgreSQL でもビジネスルールは変わらない DB がMysql でもPostgreSQL でもビジネスルールは変わらない DB がMysql でもPostgreSQL でもビジネスルールは変わらない DB がMysql でもPostgreSQL でもビジネスルールは変わらない DB がMysql でもPostgreSQL でもビジネスルールは変わらない 依存関係逆転の法則の矢印方向 依存関係逆転の法則の矢印方向 依存関係逆転の法則の矢印方向 依存関係逆転の法則の矢印方向 依存関係逆転の法則の矢印方向 依存関係逆転の法則の矢印方向 適切なコンポーネント分割が、きれいな境界線を引くことの鍵 適切なコンポーネント分割が、きれいな境界線を引くことの鍵 適切なコンポーネント分割が、きれいな境界線を引くことの鍵 適切なコンポーネント分割が、きれいな境界線を引くことの鍵 適切なコンポーネント分割が、きれいな境界線を引くことの鍵 適切なコンポーネント分割が、きれいな境界線を引くことの鍵                         17 / 17