設計通りに実装が進まないメンバがいたため、上司から「設計段階で止めず、実装まできちんと指導するように」と指摘を受けました。当時、該当のメンバはある程度の実装経験があり、設計からそのまま実装に移れるだろうと考えていましたが、実際にはいくつかの問題が発生しました。
具体的な事例
1. FactoryMethodパターンを適用したソートクラスの設計・実装
-
設計段階: クラス図では、ソートクラスが比較処理を担当する
Comparer
クラスを生成するように記載されていました。CreateInstance
メソッドでComparer
のインスタンスを生成する設計です。 -
実装段階: 実装時、
CreateInstance
メソッド内でComparer
クラスを生成せず、比較処理自体を直接CreateInstance
メソッドに書いてしまい、Comparer
クラスが使われていませんでした。
2. 実装から設計に逆戻りする例
別のメンバのケースでは、まず実装を行い、その後で設計を作成していました。この結果、適用したいと考えていたデザインパターンに合致しない設計となり、無駄な作業が発生していました。
問題への対応
1. 設計から実装への変換の練習
この問題は、設計と実装の対応を正しく理解できていない、もしくは経験が不足していることが原因と考えました。そのため、以下のような対応を行いました:
-
意図の説明: FactoryMethodパターンの
CreateInstance
メソッドは、インスタンス生成のみを担当するメソッドであり、それ以外の処理を記載しないことを具体的に説明しました。 - ペアプログラミング: 実装の流れを一緒に進める中で、設計から実装への変換をサポートしました。
- 練習の機会を提供: 設計通りに実装する練習を繰り返すことで、設計の意図を正確に反映したコードを書くスキルを習得してもらいました。
2. 設計の重要性を説明
実装から設計を後付けする問題については、「なぜ設計を先に行うのか」を具体的に説明しました。以下のような点を伝えました:
- 手戻りのリスク: 実装から設計を行うと、適用したいデザインパターンに沿わない設計になる可能性が高くなり、実装の多くを作り直す必要が出る場合があります。
- 効率の向上: 設計を先に行うことで、実装時に迷いが少なくなり、作業効率が上がる。
- 目的に合った設計の重要性: たとえば、今回の場合、デザインパターンを適用した設計を学ぶのが目的だったため、工程を飛ばすと学習効果が失われることを指摘しました。