はじめに
変更しやすいコードが書けないのにソフトウェア開発とか舐めているのですか
天使様1ごめんなさい〜、nikkieです
「かわいい」と技術書が夢の合体を果たした、ちょうぜつ本(『ちょうぜつソフトウェア設計入門』)!🤗
そんなちょうぜつ本の読書会に向けて、第2章「パッケージ原則」を予習しました。
目次
- はじめに
- 目次
- 前回、第1章ではクリーンアーキテクチャを完全に理解
- 6つのパッケージ原則、全部初めて知りました
- 6つのパッケージ原則のルーツ
- 終わりに
- P.S. 7/7(金) 第2章「パッケージ原則」のちょうぜつ本_読書py!
前回、第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:非循環依存関係の原則
- SDP:安定依存の原則
- 不安定に依存するとそれ以上の安定はない
- 安定とは、変更の起きにくさ
依存パッケージが変わるのは、自身に変更を加えたのと同じ意味 (Kindle版 p.78 2-5)
- SAP:安定度・抽象度等価の原則
SDPとSAPはクリーンアーキテクチャの4つの同心円の図の説明になっているように思われます。
- SDP:依存の向き(外側から内側へ)
- SAP:内側(ドメインモデル)ほど抽象度が高く、安定度が高い
6つのパッケージ原則のルーツ
パッケージ原則は6つとも私は初見だったのですが、他の文献にもありました。
いずれもUncle Bobが関わっていそうです。
- https://wiki.c2.com/?PrinciplesOfObjectOrientedDesign
- three principles of package cohesion(パッケージの凝集度)
- three principles of package coupling(パッケージの結合度)
- SOLID原則含む11原則!
- アジャイルソフトウェア開発の奥義 第2版 | SBクリエイティブ
- 第20章 パッケージ設計の原則
- Clean Architecture - アスキードワンゴ
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(金)です!
常連さんも、お久しぶりの方も、はじめましての方もパッケージ原則に興味ある方、大歓迎です!
ぜひぜひお気軽にお越しください〜
#ちょうぜつ本 Python使い視点で読む読書会、次回は2章「パッケージ原則」、7/7(金)七夕🎋開催です!https://t.co/tZMEk1Gcj4
— nikkie にっきー (@ftnext) 2023年6月18日
orihimeパッケージとhikoboshiパッケージが分離させられている...?🤔