コード臭59 -基本/do機能


並べ替え、dosort、basicsort、dobasicsort、Primitivesort、SuperBasicPrimitivesort、誰が実際の作業を行うのですか?
TL博士:より良い解決のために叫ぶミニラッパーのための近道.

問題

  • 読みやすさ
  • 悪いネーミング
  • 低粘着性
  • シングル責任原則
  • 解決策

  • 良いオブジェクトラッパーを使用する
  • は、ダイナミックな装飾者
  • を使います

    サンプルコード


    間違い


    <?
    
    final class Calculator {
    
        private $cachedResults;
    
        function computeSomething() {
            if (isset($this->cachedResults)) {
                return $this->cachedResults;
            }
            $this->cachedResults = $this->logAndComputeSomething();
        }
    
        private function logAndComputeSomething() {
            $this->logProcessStart();
            $result = $this->basicComputeSomething();
            $this->logProcessEnd();
            return $result;
        }
    
        private function basicComputeSomething() {
            /// Do Real work here
        }
    
    }
    


    <?
    
    final class Calculator {
        function computeSomething() {
            // Do Real work here since I am Compute!
        }
    }
    
    //Clean and cohesive class, single responsibility
    
    final class CalculatorDecoratorCache {
    
        private $cachedResults;
        private $decorated;
    
        function computeSomething() {
            if (isset($this->cachedResults)) {
                return $this->cachedResults;
            }
            $this->cachedResults = $this->decorated->computeSomething();
        }
    }
    
    final class CalculatorDecoratorLogger {
    
        private $decorated;
    
        function computeSomething() {
            $this->logProcessStart();
            $result = $this->decorated->computeSomething();
            $this->logProcessEnd();
            return $result;
        }
    }
    

    検出


    doxxx ()やbasicxx ()のような慣習に従うと、静的なプリンタに対してラッピングメソッドを見つけるように指示することができます.

    タグ

  • 宣言性
  • 結論


    我々は開発者の生活の中でいくつかの時間のこの種の方法に遭遇した、我々は何かがそれらとokではなかったにおいがした.今はそれらを変更する時間です!

    詳しい情報




    % [ https://en.wikipedia.org/wiki/Wrapper_function ]
    % [ https://en.wikipedia.org/wiki/Decorator_pattern ]

    クレジット


    Roger BradshawUnsplashによる写真

    The primary disadvantage of Wrap Method is that it can lead to poor names. In the previous example, we renamed the pay method dispatchPay() just because we needed a different name for code in the original method.


    マイケルマイケル


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