共通化と抽象化
#宣言的UIの設計レシピ #設計 #設計原則 #インタフェース #エンジニアリング #プログラミング
経験上ほとんどのケースで、共通化はアンチパターンとなることが多い
アプリケーションの構成とチーム構成を疎結合にする
共通化という考え方はアンチパターンを生み出すだけ説
共通化すれば良いとは限らない
技術的要件で共通化と抽象化は9割間違っている
Hyrumの法則
境界づけられたコンテキストを跨いで共通化するな
@shibu_jp: 循環的複雑度とか行数で見るの、いまいちだよな、と思っていたが、The Philosophy of Software Designにまんんまそれっぽいことが書いてあった。行数が短くてもmalloc/freeを意識しなきゃいけないようなコード、いつどう呼ばれるかわからんフレームワーク内部のコードは認知的負荷が大きいと。
#認知負荷
@lga0503: 共通処理と呼ばれてるモノで便利なモノ見た事ない
@lga0503: タスクを切り出すんではなくオブジェクトを抽出するのがコツ
そしたら共通処理なんて名前つけんやろ
そんで関心を凝縮して粒感出てきたら勝ち
輪郭ふわふわしてる時点ではまだ未成熟
@MinoDriven: クソコード動画「共通化の罠」
書きやすさ分割の罠
生産性の追求に潜む罠
https://twitter.com/yusuke_arclamp/status/1684486568973864960
機能の共通化によって、コードのメンテナンス性を上げていくことによって、かえって依存関係をふやしてモノリス化を促進したと思っています - そうですね!機能の共通化は諸刃の剣ですね。保守容易性を上げることが必ずしも柔軟性をもたらさないと言うのは、興味深い話です。
機能の共通化は諸刃の剣
保守容易性を上げることが必ずしも柔軟性をもたらさない
/mrsekut-p/抽象化
「共通化しないと将来的に変更が大規模になる」について
大規模でも単純な置き換えなら集中すれば数日〜1週間で終わるものもある
利用者に制約をもたらし、ワークアラアンドが必要な場合はどう転んでも変更は大変
逸脱事例を含めてすべてをレールに乗せる
共通化というのはそれだけ高度な能力が求められ、運用コストもかかる
どれだけ上手く本質のみを共通化できるかどうか
意図や知識 (状況・問題・解決方法) が重複していると自信を持って言える場合にのみ共通化すべき
処理の内容でなく意図によって共通化しろ
関心の分離は5W1Hの何を分離しているかを意識する
共通部分をスマートに管理するディレクトリ構成
自信がないなら共通化せずに愚直に書いたほうが個別対応できるので後から方針を変えやすい
広く使われようとすればするほどステークホルダも複雑になる
複雑さはどこからやってくるのか
コミュニケーションや運用ルール策定、メンテナンスが足枷になる
デザインシステムとかもそう
基本的に未来予知は不可能
犠牲的アーキテクチャ
技術的負債
変更容易性など幻想
共通化する際の関数設計
ETC原則や参照透過性
綿密なドキュメンテーション
optionalな引数を増やさない
責務が肥大化していく
local reasoningとかは例外
ifで分岐しない
パターンを用意して呼び出し側で切り替える
#WIP
https://www.notion.so/11c05b29e9a049779ffcfa998589d61d#f627b67994af48af8b3ff74005a09dd4