早すぎる抽象化
クソコード動画「共通化の罠」
https://video.twimg.com/ext_tw_video/1127539052998037504/pu/vid/472x360/9ohElINwr_sCapLo.mp4
こんなイメージ基素.icon
この動画、無理やり最終系を目指して爆死してるけど、リファクタリングする前にコピーして動かせることを担保してからいらない部分を消すんじゃダメだったのかな基素.icon この動画は共通モジュールが長方形で独立しているように見えるから、動かせそうだけど、実際ぐちゃぐちゃになっているとそれすら無理だと思うmrsekut.icon
なるほど基素.icon
できるケースももちろんあるnishio.icon
が、この図だと1本の線で書かれているところが全ての共通モジュールの呼び出しなので100本とかの線になってる
まず共通モジュールをコピーして"A専用の元共通モジュール"をつくり、Aと"共通モジュール"の間の依存関係を全部"A専用の元共通モジュール"に置き換えれば理論上動く
しばしば図に書かれていない依存関係があることにやってから気づくw
運用するのに結構お金がかかるインフラの上で組まれていたらダメというパターンもありえますね基素.icon
最初の設計の仕方も、リファクタの仕方も、問題ある
動画に関連してこちらも
同じようなロジック、似ているロジックであっても、概念が違えばDRYにすべきではないのです。 https://gyazo.com/55f6b0344b19cf3b46009802d24237a1
面白すぎるsta.icon*2
このポストでこのページを思い出したmtane0412.icon
@itchie_tatsumi: 格ゲーを開発していた頃、処理を共通化して整理していたら、開発終盤のバランス調整で特殊仕様が次々と追加され、共通関数の中が条件分岐の地獄になっていました。 「このキャラだけ投げ処理が特殊」「この技だけ硬直が違う」など、例外判定の連続です。
ところで「早すぎる抽象化」はここの話よりもう少し抽象度の高い話のような気がするなnishio.icon
関連nishio.icon
「似ている」からと言ってまとめた時点で依存関係を増やしてしまっている
「似ている」程度でまとめたのが間違いで、括り出した共通部分は「未来永劫共通不変である」くらいの気持ちが必要だった