Anarchy In the 1K

Clean Architectureの内容を元に原則の分類

背景

プログラミングを行う中でいくつか原則を学ぶ機会があったのですが、正直多すぎて覚えられない。

一度体系的にまとめて整理しないとダメだなと思っていたら、以下の内容が求めていたものだった為、備忘も兼ねてメモしておきます。

原則の分類

本書より

Clean Architectureのp.78に以下の通り記載があります。

...SOLID原則がモジュールレベルの開発に使われるものであることを意図している。コードレベルよりも上に適用するものであり、モジュールやコンポーネントで使うソフトウェア構造の定義に役立つ。
...SOLID原則の説明が終わったら、次はそれに対応するコンポーネントの原則を説明する。その後に上位レベルのアーキテクチャの原則の話に移る。

これを読むと、原則が以下の通り分類されると読み取れます。

各レベルの考察

コードレベル

コードレベルの原則に関して、本書の中では特に言及されていませんでした。しかし、モジュールレベルよりも粒度が細かいレベルであることを考えると、処理単体に関する原則が、このレベルに当たると思われます。

モジュールレベル

そもそも、モジュールとは何かに関しては、本書のp.77の以下記載より、SOLIDの原則(モジュールレベル)の対象がクラスであることから、データと処理のまとまりをモジュールと呼んでいると判断しました。

...SOLID原則は、関数やデータ構造をどの様に組み込むのか、そしてクラスの相互接続をどのようにするのかといったことを教えてくれる。

モジュールにどのデータと処理を含めるかや、モジュール間の関係に関する原則が、このレベルに当たるかと思われます。

コンポーネントレベル

本書のp.109に以下の通り記載があります。

コンポーネントとは、デプロイの単位のことである。システムの一部としてデプロイできる、最小限のまとまりを指す。

コンポーネントにどのモジュールを含めるか*1や、コンポーネント間の関係*2に関する原則が、このレベルに当たるかと思われます。

アーキテクチャレベル

本書のp.148に以下の通り記載があります。

ソフトウェアシステムのアーキテクチャは、それを構築した人がシステムに与えた「形状」である。その形状を生み出すためには、システムをコンポーネントに分割し、コンポーネントをうまく配置して、コンポーネントが相互に通信できるようにする必要がある。

コンポーネントの分割基準や、コンポーネントの実行環境への配置方法*3に関する原則が、このレベルに当たるかと思われます。

コンポーネントレベルとの違い

コンポーネントの分割基準に関して、コンポーネントレベルの原則との違いが分からず少々悩んだのですが、以下の違いがあると気が付きました。

*1:本書の言葉では、コンポーネント凝集性

*2:本書の言葉では、コンポーネントの結合

*3:コンポーネントをモノリシックなプロセスとして起動するか、同一サーバ上に別プロセスとして起動するか、別サーバ上に別プロセス(サービス)として起動するかなど。