「Clean Architecture」を読む

設計

この本に期待すること

  • Clean Architecture を説明できるようになりたい
  • 今業務で扱っているプロダクトが Clean Architecture を取り入れている部分とそうでない部分、メリデメを理解したい
  • フロントエンドにも適用できる?

要約

1 章 設計とアーキテクチャ p.33 – p.40

設計の目的 = ソフトウェアアーキテクチャの目的は、求められるシステムを構築・保守するために必要な人材を最小限に抑えることである。

  • 開発者が増えても、リリース頻度やコード数が増えなければ崩壊のサイン
  • 市場に投入するスピードを言い訳に、クリーンでないコードを書いた結果、遅くなり競合に抜かれる
  • TDD は早い

image

2 章 2 つの価値のお話 p.41 – p.45

振る舞い

ステークホルダーのマシンが要件を満たせるように、プログラマはコードを書くことになる。
多くのプログラマは、それが自分たちの仕事だと思っている。マシンが要件を満たせるようにして、バグがあれば修正する。それが仕事だと信じている

構造

ステークホルダーが機能を変更したいと思えば、その変更は簡単にできるようになっておくべきだ。変更の難易度は、変更の形状でなく、変更のスコープに比例しなければいけない。

7-10 章

オープン・クローズドの原則

ソフトウェアを変更しやすくするために、既存のコードの変更よりも新しいコードの追加によって、システムの振る舞いを変更できるように設計すべきである

リスコフの置換原則

交換可能なパーツを使ってソフトウェアシステムを構築するなら、個々のパーツが交換可能となるような契約に従わなければいけない

20 章 ビジネスルール p.189 – p.193

ビジネスマネーを生み出したり節約したりするルールのこと たとえば、銀行がローンに N%の利子を付けているとすると、それは銀行のお金を生むためのビジネスルールになる 利子をコンピュータで計算しようと、そろばんで計算しようと、まったく関係はない。

ビジネスデータ

ローンであれば、貸付金残高、金利、支払いスケジュールなど

最重要ビジネスルールと最重要ビジネスデータは密接に結び付いているため、オブジェクトの有力な候補になる。こうしたオブジェクトのことをエンティティと呼ぶ

ユースケース

自動化されたシステムを使用する方法。ユーザーから提供された入力、ユーザーに戻す出力、出力を生成する処理ステップなどを規定している アプリケーション固有のビジネスルールが含まれている

例: 候補者の与信スコアが 500 以上あることを確認するまで、ローンの支払い見積りを提示しないと決めているとしよう その場合、 連絡先情報画面がすべて入力され、値がきちんと検証され、与信スコアが基準値を超えていることが確認できるまでは、支払い見積りの画面に進まないようにシステムを設定する

image

22 章 クリーンアーキテクチャ p.199- p.205

image

右下に、円の境界線をどのように越えるべきかの例を用意した。コントローラー とプレゼンターは、次のレイヤーのユースケースと通信している。制御の流れに注目してほし い。コントローラーから始まり、ユースケースを経由して、最後にプレゼンターで実行されて いる。ソースコードの依存関係にも注目してほしい。それぞれが内側のユースケースに向かっ ていることがわかる。 こうした明らかな対立は、通常は依存関係逆転の原則(DIP)を使って解消する。Java のよ うな言語では、インターフェイスや継承を整理して、境界線を越えたところでソースコードの 依存関係が制御の流れと逆転するようにする。たとえば、ユースケースからプレゼンターを呼び出す必要があるとしよう。依存性のルール に違反するため、直接呼び出すことはできない。円の外側にある名前は、円の内側から触れる ことはできないからだ。したがって、ユースケースから円の内側にあるインターフェイス(図 22-1 の「ユースケース出力ポート」)を呼び出すようにして、円の外側にあるプレゼンターが インターフェイスを実装することになる。

エンティティ

エンティティは、企業全体の最重要ビジネスルールをカプセル化したものだ。エンティティは、メソッドを持ったオブジェクトでも、データ構造と関数でも構わない

インターフェイスアダプター

モデルは、コントローラーからユースケースに渡され、ユースケースからプレゼンターとビューに戻されるデータ構造にすぎない

プレゼンター

ビュー

コントローラー

後で調べる

  • プレゼンター、ビュー、コントローラー
  • この書籍で言う MVC の確認。Spring MVC が言及されている?

今度読む

設計

Posted by kyogom