再利用目的で小さく作るわけではない
小さく作るのは良いことだと思うが、それは再利用駆動ではないmrsekut.icon
小さく作ったことの恩恵の一つとして、再利用性がある
再利用駆動で小さく分けると、
「2つの関数で同じ処理をしているから抜き出そう」という安易発想になる
これがたまたま上手くいくこともある
関数の責務などを度外視して、「共通部分」を抜き出しているだけ
直交性もクソもないので、その2つの関数以外では再利用できない、という状況に陥る
共通部分だけに着目した安易な例としては
今、AとBというclassを別々で作っていて
https://gyazo.com/5136c5cc107c17237f629509b1369906
AとBの共通部分あるやん!(赤色)と思って、
赤
Aの残り
Bの残り
の3つにわけてしまう
しかし、将来的にCのようなclassを作りたいとなった時に、
赤の部分の一部はCからはみ出ているので、Cは赤を再利用できない
理想的には、個々の責務を考えて、最初から
青
Aの残り
Bの残り
の3つで分けるべきだった
「共通しているから切り出す」ではない
というか、「小さく作る」をちゃんと実践していると、
https://gyazo.com/edfb941ad6a0e6591227a87a635be3e6
というふうな分けられ方が、自然に為されると思う
あくまでもイメージだがmrsekut.icon
背反であるべきと主張したいわけではないのでこの図は語弊があるmrsekut.icon
もちろん、実際のプログラミングの中で、
https://gyazo.com/5136c5cc107c17237f629509b1369906
A、赤、Bの分け方が適切だ、となっている状態で
Cを追加する時に赤を分割する、ということもあるとは思う
ここで言いたいのは
「再利用目的のために小さく作る」というのは順序がおかしい
似ているとかではなく、責務に従って小さく作るべき
責務に従っているなら、重複があろうと関係ない
「似てる」「同じ」と言った時に、何に対して「似てる」と言ってるかという話かmrsekut.icon
コードの字面が同じなのか、責務が同じなのか、
これらの概念は全く別物
他の例