2021年6月17日木曜日

Pimplはアンチパターンだと思います

はじめに

数年前は使うこともあったのですが, 現代にはふさわしくないと思い使わなくなりました.

利点と欠点, それについての考え

利点

  • includeを減らして, コンパイル時間の短縮
    • 2021年では, 計算機, コンパイラ, そしてリンカの性能が向上しました. これは使う理由にはなりません. 聞こえていますか?20年前から来たあなた
      • 時間は金で買うべきです, ビルドマシンぐらい金をかけましょう
    • 今のプロジェクトのビルドが遅い理由は, 次です. ビルドが遅すぎて, ビルドは一日一回, agileではなく, sluggishです, stupidプロジェクトでもいいです
      • Pimplを数多く使っているのに, includeが多い. コピペのせいもあるのですが
        • リファクタリングをしないので, コピペが修正されることは2度とない
      • inlineが多い
        • inlineを理解していない
        • コンパイラオプションで, できるだけinline展開するようにしている
        • inline展開で処理が速くなるとは限らない, これは今も昔も
      • コンパイラオプションで最大限の最適化を設定している
        • O2より上は速くなるかは環境依存, 遅くなることはよくある
          • 使用者が少ないので, 不具合も多くなる
        • コンパイラを理解していない
  • 実装の隠蔽
    • 例えば, JavaやC#で困ったことはありますか?
      • 自分の意に沿わないからといって, ヘッダを書き換えるようなエンジニア?をチームに置いておきますか? そちらの方が問題だと思います
    • インターフェイスを使って, FILEのようなことをすれば完全に隠蔽できるので, 使う理由にはなりません

欠点

  • メモリコストと実行速度に悪影響がある
    • 処理落ちがどうのなど, 言っていることとやっていることが異なる
  • 冗長
    • 処理を転送するだけの記述がコード量を増やす
    • コードを追うことに2倍のコストがかかる
    • たまにインターフェイスのメソッド名と, 実体のメソッド名が異なる
      • ガンジーでも助走付けて
  • ヘビークラスを作りやすい
    • これは当社比なのですが, 10年以上のエンジニア経験では, Pimplイディオムはくそでかクラスになりやすい傾向にあります
      • コンパイル時間の短縮という錦の旗, メモリコストと実行速度を考えると, Pimplイディオムがコンポジションに向いていないことが原因と思っています
    • コンポジションやアグリゲーションで, ソフトウェアを建築する, という考え方を持っている人には受け入れがたいです

まとめ

他人に強制するつもりはありませんが, 意味のないイディオムだと思います. 

0 件のコメント:

コメントを投稿