コナーセンスについて
3.2.5.1 静的なコナーセンス
コナーセンスとは静的コナーセンスと動的コナーセンスの2種類が存在する
性的なコナーセンスとは
ソフトウェアの作り方に関する考え方の一つです。
静的コナーセンスの考え方ではコードの結びつき方が重要でその結びつきが中心的か分散的なのか評価する。
中心的な結びつき方を求心的な結合と呼ぶ。たくさんのコードが一つの中心に向かって結びついている状態です。
分散的な結びつき方を延伸的な結合と呼びます。これはコードが分散して離れている状態です。
ソフトウェアの設計者はどちらの結びつきを使うかを決めることができる。そしてその結びつきがどのくらい強いのか、またどのくらい弱いのか評価することができる。
例えば、求心的な結合の場合、たくさんのコードが密集しており、一緒に動くことが多いです。一方、遠心的な結合の場合、コード同士が離れており、あまり、一緒に動くことはないです。
つまり、静的なコナーセンスとはコード同士の結びつき方をみる考え方であり、ソフトウエアの設計の結び付きを評価するためのツールなのです。
静的コナーセンスの種類と度合い
・名前のコナーセンス
・型のコナーセンス
・意味のコナーセンス
・位置のコナーセンス
・アルゴリズムのコナーセンス
3.2.5.2 動的なコナーセンス
度合いと種類
・タイミングのコナーセンス
複数のコンポーネントを実行するタイミングは重要だ。このタイプのコナーセンスのよくあるケースには2つのスレッドが同時に実行されることで引き起こされる競合状態がある。そうした競合状態は同期操作の結果に影響を与える。
スレッドとはコンピューターの中で同時に複数の処理を行うことができる仕組み。
例えば、一つのスレッドが動画を再生している間に別のスレッドが音楽を再生することができる。しかし、複数のスレッドが同じデータや
リソースにアクセスしようとすると問題が生じる。これが競合状態という。競合状態ではスレッド同士がお互いに邪魔し合って正しく動作しなくなること。
なのでタイミングのコナーセンスはスレッド同士の競合が起きないようにしよう
・値のコナーセンス
他のコナーセンスとは一つのものを使うと他のものに影響出ることを意味します。また分散システムではすべてのデータベースで変更するときにすべての値を一緒に変更するか、または変わらないようにする必要がある。→トランザクションをしっかり設計する
他のコナーセンスでは一つの変更が他の部分にも影響を与えることを考え、バランスをとる必要がある。
・アイデンティティのコナーセンス
このコナーセンスは複数のコンポーネントがある、エンティティの特定のインスタンスに依存している時に発生する。2つのコンポーネントが分散キューのような共有のデータ構造を共有し、更新を共にしなければならない場合、動的コナーセンスを評価するにはツールがないから難しい。
↓簡単にまとめると
アイデンティティのコナーセンスは複数の部分が依存し合って動く場合にお互い支え合うことを考える概念です。
その評価は難しいですが技術の進歩によって解決策が見つかるかもしれない。
リファクタリングの順番
静的
名前
型
意味
アルゴリズム
位置
動的
実行順番
タイミング
値
アイデンティティ
上の順番でリファクタリングを行うべきで、できるだけ静的なコナーセンスを好むべきだ。
コナーセンス位置関係
コナーセンスの位置関係はコードの中でモジュール同士がどのくらい離れているか表している。
コードを書くときはコナーセンスが強い方がいい。つまり、関係の強いコードは一緒の場所にまとめた方がいい。
開発者はコードの位置も考えた方がいい。
コナーセンスの度合い
コナーセンスの度合いはその影響の大きさに関連する。
Page-jonseはシステムのモジュール性を向上さえるためのガイドラインを提供しています。
1 システムを小さいパーツに分けること(カプセル化)
2 カプセル化の境界を跨ぐ場合は影響を小さくする
3 カプセル化の境界内では度合い(影響を多くする)
以上です。ありがとうございます。