クラス設計雑記

最近スクリプト*1に機能追加してプログラム*2を作成する機会があった。

最初はなんとなく実装しながら必要に応じてクラスを追加していったが、途中からロジックをシンプルにするために、あちこちのクラスのメンバーの修正が発生してしまい、結局最初に書いたコードの3〜4割程度を書き直すこととなった。

原因はクラスが3つ程度ならばクラス設計なしでもいけるが*3、クラスが5つ以上になるとクラス設計がないと厳しいからだと思う。思うにクラス3つの場合、クラス間の通信は3C2=3通りであるが、クラス5つの場合クラス間の通信は5C2=10通りとなる。流石に10通りもあると最適な組み合わせを実装と並行して考えるのは難しい

清書したようなクラス図はいらなくても、チラシの裏にでもER図やクラス図をざっくりとでも書いてみることが大切なのがわかった。

ちなみに当然なんだけどER図やクラス図は言語によらないがフレームワークは言語に依存する。そもそも両者はそれぞれ担当する範囲が違う。フレームワークを利用する時点である程度クラス設計は束縛されることとなる。

*1:単機能・比較的ロジックがシンプル・小規模・クラスなし

*2:多機能・それなりに複雑・中規模・クラスあり

*3:というかそもそも3つ程度ならクラスなしでも大丈夫かも