コード嗅覚55 -オブジェクト乱交


データホルダーとしてあなたのオブジェクトを見るならば、あなたは彼らのカプセル化に違反します、しかし、あなたは実生活でのように、あなたは常に同意を求めなければなりません.

TL;DR: Don't mess with other object's data.


問題

  • 情報隠蔽違反
  • カプセル化違反
  • カップリング
  • 解決策

  • カップルのインターフェイスと行動、決してデータ.
  • サンプルコード


    間違い


    <?
    
    final class Point {
        public $x;
        public $y;
    }
    
    final class DistanceCalculator {
        function distanceBetween(Point $origin, Point $destination) {
            return sqrt((($destination->x - $origin->x) ^ 2) + (($destination->y - $origin->y) ^ 2));
        }
    }
    


    <?
    
    final class Point {
        private $rho;
        private $theta;
    
        public function x() {
            return $this->rho * cos($this->theta);
        }
    
        public function y() {
            return $this->rho * sin($this->theta);
        }
    }
    
    final class DistanceCalculator {
        function distanceBetween(Point $origin, Point $destination) {
    
            return sqrt((($destination->x() - $origin->x() ^ 2) + (($destination->y() - $origin->y()) ^ 2)));
        }
    
    }
    

    検出


    あなたは、パブリック属性、セッターとGetters使用のためにあなたを警告して、彼らを落胆させるために、あなたのプリンターをセットすることができます.

    タグ

  • カップリング
  • 結論


    あなたのクラスがセッター、ゲッターと公共の方法で汚染されるならば、あなたは確かに彼らの偶然の実施を結合する方法を持っています.

    別名

  • 不適切な親密さ
  • 関係






    詳しい情報

  • Wikipedia
  • Refactoring.Guru
  • C2 Wiki
  • クレジット


    Nicolas Poussin

    A data structure is just a stupid programming language.


    ビル・ゴスペル


    この記事はCodesmellシリーズの一部です.


    最終更新日: 2021/06/14