コンポーネントの凝集性に関する原則 再利用・リリース等価の原則とは?
背景
コンポーネントの設計を行う際に、再利用とリリースの適切な単位を考えることは、システムの保守性や拡張性を考える上で重要だと思います。どのクラスを一つのコンポーネントにまとめるべきかを考える際の指針となるのが、再利用・リリース等価の原則です。
再利用・リリース等価の原則とは?
私が読んだ書籍では、以下のように定義されていました。
「再利用の単位とリリースの単位は等価になる」(ロバート・C・マーチン, 2018, 『Clean Architecture 達人に学ぶソフトウェアの構造と設計』, 翔泳社, p.123)
再利用する単位とリリースする単位を同じにする、つまり、再利用しないクラスを同じリリース単位として含めてはいけないという原則です。
違反することによる問題
別のコンポーネントに分けるべきケース
AとBというクラスが一つのコンポーネントとしてリリースされているケースを考えます。前提として、クラスAとクラスBはそれぞれ別の目的で利用されることを想定しています。
クラスAに変更がありリリースされた場合、クラスAとクラスBはまとめてリリースされることになります。これにより、クラスBのみを使用している利用者は、自分が使用しているクラスとは関係のないリリースの内容を確認することになり、無駄な作業が生じてしまいます。
このようなケースでは、再利用される際の目的が異なるAとBのクラスは分けてリリースを行うべきです。
同じコンポーネントにまとめるべきケース
次に、AとBというクラスが別のコンポーネントとしてリリースされているケースを考えます。前提として、クラスAとクラスBは同じ目的で利用されることを想定しています。
この場合、利用者はAとBのバージョンごとの互換性を確認する必要が生まれ、再利用しにくいコンポーネントとなってしまいます。
このようなケースでは、再利用される際の目的が同じAとBのクラスは、まとめてリリースを行うべきです。
まとめ
古い書籍ですが、マイクロサービスアーキテクチャが普及している現代でも大切な原則だと思いました。メンテナンス性を高めようとするとコンポーネントを分割する必要が出てくると思います。その際の一つの指針となるのが、再利用・リリース等価の原則だと思います。
Discussion