nikkie-ftnextの日記

イベントレポートや読書メモを発信

読書ログ | #ちょうぜつ本 第2章 〜初めて見る原則がいっぱいだ!〜

はじめに

変更しやすいコードが書けないのにソフトウェア開発とか舐めているのですか
天使様1ごめんなさい〜、nikkieです

「かわいい」と技術書が夢の合体を果たした、ちょうぜつ本(『ちょうぜつソフトウェア設計入門』)!🤗
そんなちょうぜつ本の読書会に向けて、第2章「パッケージ原則」を予習しました。

目次

前回、第1章ではクリーンアーキテクチャを完全に理解

いわしまんさんの書評ブログをきっかけに手に取り、かわいいな〜と読んでいたらクリーンアーキテクチャを完全に理解!
これってすごいことだと思いませんか?

6つのパッケージ原則、全部初めて知りました

第2章は「パッケージ原則」の章。

(略) 複数のコードの集まりをパッケージと考えましょう。(Kindle版 p.66 2-1)

とあるように、コードのまとめ方の原則を扱った章です。
なぜコードをまとめるかというと、再利用のためです。

ひとつのパッケージの凝集度に着目する原則 3つ

  • REP:再利用・リリース等価の原則
    • リリースされたものだけ再利用、再利用したければリリース
    • リリースと再利用が一致するまとまりの粒度を設計
      • 見極めるために、続く2つの原則を使う
  • CRP:全再利用の原則
    • 責務に対して最小に」(Kindle版 pp.75-76 2-4)
    • ひとつのパッケージに多くを含みすぎてはならない
  • CCP:閉鎖性共通の原則
    • 責務に必要なものを含んで閉じよ」(Kindle版 pp.75-76 2-4)
    • ひとつの変更は、ひとつのパッケージを交換すれば済む形

CRPとCCPの説明で分かりやすかったのが、キーボードの例。
キーボードはパッケージを説明します。

  • CRPでは、多くを含みすぎないパッケージの例としてキーボード
    • 責務:PCへの文字入力
    • 文字入力の調子が悪い時、PCまるごとや個々のキーではなく、キーボードをまず交換する
    • キーボードは、責務が一つの概念で収まるパッケージの例
  • CCPでは、閉じているパッケージの例としてキーボード
    • 閉じているとは、責務セットがほどよいサイズで自己完結
      • すべてのキーが揃っていて、キーは基盤と接続している
    • 変更するには、キーボード(1つのパッケージ)だけを交換すればよい

✍️複数のコードを1つのパッケージにまとめるときは、再利用とリリースが等価になるよう、キーボードのような単位でまとめる!

複数のパッケージの関係に関する原則 3つ

  • ADP:非循環依存関係の原則
    • パッケージの依存が循環してはならない (Kindle版 p.75 2-4)

    • 要素の循環(密な結合)は、1つのパッケージに閉じ込める(例:java.lang)
  • SDP:安定依存の原則
    • 不安定に依存するとそれ以上の安定はない
    • 安定とは、変更の起きにくさ
    • 依存パッケージが変わるのは、自身に変更を加えたのと同じ意味 (Kindle版 p.78 2-5)

  • SAP:安定度・抽象度等価の原則
    • 安定度が高いパッケージであるためには抽象度が高くなければならず、安定度の低いパッケージでよい場合は抽象度が低くてもよい (Kindle版 p.79 2-6)

    • 抽象の説明の中で、汎用概念を扱うサードパーティのユーティリティライブラリや、プログラミング言語そのものも抽象というのは学びでした

SDPとSAPはクリーンアーキテクチャの4つの同心円の図の説明になっているように思われます。

  • SDP:依存の向き(外側から内側へ)
  • SAP:内側(ドメインモデル)ほど抽象度が高く、安定度が高い

6つのパッケージ原則のルーツ

パッケージ原則は6つとも私は初見だったのですが、他の文献にもありました。
いずれもUncle Bobが関わっていそうです。

Uncle Bobの著作以外での言及があるかは少し気になるところですが、ルーツも分かって、これまで知る機会がなかっただけだったんですね〜

終わりに

ちょうぜつ本 第2章からコードをまとめる上での6つの原則を知りました。

  • 1つのパッケージにまとめる際の原則:REP・CRP・CCP
    • 責務が一つの概念で収まり、かつ、閉じている(キーボードのイメージ)
  • 複数のパッケージの結合の原則:ADP・SDP・SAP
    • パッケージの依存は循環してはならぬ
    • 安定に、すなわち抽象に依存させる(クリーンアーキテクチャじゃん!)

思い返すとこれまでコードをまとめる際には雰囲気でやっちゃっていたわけで、この6つの原則の理解を深めれば、コードをまとめる際にも理由付けができそう。伸びしろみーつけた!

ちなみに第2章の個人的最かわいいポイントは2-3の挿絵!
どの方とどの方が組みになるのかも......
ちょっとフィギュア正面から見せて!
そしてセット販売か...
これニジガクだったらゆうぽむで売ってるってことですよね!(<- 何の話?)

P.S. 7/7(金) 第2章「パッケージ原則」のちょうぜつ本_読書py!

次回ちょうぜつ本_読書py(Python使い視点でちょうぜつ本を読む、みんなのアウトプット中心の読書会)は7/7(金)です!

常連さんも、お久しぶりの方も、はじめましての方もパッケージ原則に興味ある方、大歓迎です!
ぜひぜひお気軽にお越しください〜


  1. 最近のとてもよかったテクノロジー記事です