名前のコナーセンス

名前のコナーセンスは複数のコンポーネントがエンティティの名前に関して一致しなければならないときに生じます。メソッド名がこの種のコナーセンスの例です。メソッド名が変更されると、メソッドを呼び出す側が新しいメソッド名を使うよう変更する必要があります。

ほどんどありとあらゆるコード例に名前のコナーセンスがあります。以下の Python 標準ライブラリから取ったクラス宣言を考えてみてください(わかりやすさのためにメソッドの実装は省略しました)。

class Request:

    def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):
        pass

    def set_proxy(self, host, type):
        pass

このコードのどの部分で名前を変更してもこのクラスを使っているコードは壊れてしまいます。たとえば以下の変更です。

  • クラス名 Request を変更する
  • メソッド名(set_proxy など)を変更する
  • __init__set_proxy に与えるパラメータ名を変更する

名前のコナーセンスは、私たちがエンティティを参照するためにラベルを使う以上は避けられません。エンティティを宣言する際にエンティティ名を変更すれば、そのエンティティを参照するすべてのコードも変更しなければなりません。このため、名前のコナーセンスは*最も弱い*コナーセンスです。しかし、このことはコードの中でエンティティを適切に命名することがいかに大切かを示してもいます。