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

【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #16

【オンライン】Clean Architecture 達人に学ぶソフトウェアの構造と設計 輪読会 #16

masyus_work

December 20, 2020
Tweet

More Decks by masyus_work

Other Decks in Programming

Transcript

  1. Clean Architecture
    達人に学ぶソフトウェアの
    構造と設計【輪読会】
    第16回:第33章~第34章
    2020/12/23 @masyus_work

    View full-size slide

  2. 第33章
    事例:
    動画販売サイト

    View full-size slide

  3. 第33章 事例:動画販売サイト
    1. アーキテクチャを決めるための第一
    歩は
    - アクターとユースケースを見
    つけること
    2. 抽象ユースケース
    - 図33-1点線部。共通化の道
    を探るのが得策

    View full-size slide

  4. 第33章 事例:動画販売サイト
    1. 抽象ユースケース
    - 図33-2赤枠
    2. ただし、デプロイ単位は様々な切り
    口を維持しておく
    - 将来的にデプロイ方法を柔軟
    に変更できて良い
    【↑分割方針】
    - 単一責任の原則(SRP)に基づくアクターによる分割
    - 依存性のルールによる分割

    View full-size slide

  5. 第34章
    書き残したこと
    設計やコーディングに関する
    そのほかのアプローチ
    (クリーンアーキテクチャ以外)

    View full-size slide

  6. 第34章 書き残したこと
    1. レイヤードアーキテクチャ
    - 水平方向
    - ソフトウェア規模が大きくなると、3つの
    パッケージングに分けるのでは手に負
    えなくなる
    - ビジネスドメインに関しては何も叫ばな

    View full-size slide

  7. 第34章 書き残したこと
    2. 機能によるパッケージング
    - 垂直方向
    - パッケージングは1つ
    - ビジネスドメインに関して叫べる

    View full-size slide

  8. 第34章 書き残したこと
    3. ポートとアダプター
    - ビジネス(ドメイン)に関するコードを技術的な
    実装から切り離して独立させること

    View full-size slide

  9. 第34章 書き残したこと
    4. コンポーネントによるパッケージング
    Controllerがリポジトリに直接アクセスしちゃった
    (つまりルールを無視して実装してしまった)
    - 何らかのガイドラインが必要になる
    - → コンポーネントによるパッケージング

    View full-size slide

  10. 第34章 書き残したこと
    4. コンポーネントによるパッケージング
    - 粒度の粗いコンポーネントに関連する全て
    の責務をひとつのJavaパッケージにまとめ
    ることを目指す
    - 図34-5のようなケースの場合、注文に関す
    るコードを書きたければ
    OrdersComponentだけを見ればOKなス
    タンスにしてしまうという方策

    View full-size slide

  11. 第34章 書き残したこと
    余談:CQRS(コマンドクエリ責務分離)とは
    - データの更新とデータの読み取りを切り離
    すパターン
    - = Command Query Responsibility
    Segregation

    View full-size slide

  12. 第34章 書き残したこと
    5. 悪魔は実装の詳細に宿る
    6. 組織化かカプセル化か
    - publicの乱用 → パッケージは事実上無い
    に等しくなってしまう
    - → 今まで解説した4つのアーキテクチャ手
    法が意味なくなってしまう

    View full-size slide

  13. 第34章 書き残したこと
    適切にアクセス範囲を絞り込みましょう

    View full-size slide

  14. 第34章 書き残したこと
    7. そのほかの分割方法
    - Javaの場合
    - OSGi
    - Java 9 モジュールシステム
    - それぞれ別のソースコードツリーに分割する
    - 例
    - ビジネスやドメイン用のソースコード
    - ウェブ用のソースコード
    - データ永続化用のソースコード

    View full-size slide

  15. 第34章 書き残したこと
    まとめ
    - いくらうまい設計をしても、その実装方法の複雑さを考慮しなければ、
    あっという間に設計が崩れてしまう
    - チームの規模やメンバーのスキル、ソリューションの複雑さ、時間と予
    算の制約を考慮する必要あり

    View full-size slide

  16. 輪読会 第16回 Fin...

    View full-size slide