0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デザインパターンを教えるときにー設計と実装はセットでー

Last updated at Posted at 2024-12-18

設計通りに実装が進まないメンバがいたため、上司から「設計段階で止めず、実装まできちんと指導するように」と指摘を受けました。当時、該当のメンバはある程度の実装経験があり、設計からそのまま実装に移れるだろうと考えていましたが、実際にはいくつかの問題が発生しました。

具体的な事例

1. FactoryMethodパターンを適用したソートクラスの設計・実装

  • 設計段階: クラス図では、ソートクラスが比較処理を担当するComparerクラスを生成するように記載されていました。CreateInstanceメソッドでComparerのインスタンスを生成する設計です。
  • 実装段階: 実装時、CreateInstanceメソッド内でComparerクラスを生成せず、比較処理自体を直接CreateInstanceメソッドに書いてしまい、Comparerクラスが使われていませんでした。

2. 実装から設計に逆戻りする例

別のメンバのケースでは、まず実装を行い、その後で設計を作成していました。この結果、適用したいと考えていたデザインパターンに合致しない設計となり、無駄な作業が発生していました。

問題への対応

1. 設計から実装への変換の練習

この問題は、設計と実装の対応を正しく理解できていない、もしくは経験が不足していることが原因と考えました。そのため、以下のような対応を行いました:

  • 意図の説明: FactoryMethodパターンのCreateInstanceメソッドは、インスタンス生成のみを担当するメソッドであり、それ以外の処理を記載しないことを具体的に説明しました。
  • ペアプログラミング: 実装の流れを一緒に進める中で、設計から実装への変換をサポートしました。
  • 練習の機会を提供: 設計通りに実装する練習を繰り返すことで、設計の意図を正確に反映したコードを書くスキルを習得してもらいました。

2. 設計の重要性を説明

実装から設計を後付けする問題については、「なぜ設計を先に行うのか」を具体的に説明しました。以下のような点を伝えました:

  • 手戻りのリスク: 実装から設計を行うと、適用したいデザインパターンに沿わない設計になる可能性が高くなり、実装の多くを作り直す必要が出る場合があります。
  • 効率の向上: 設計を先に行うことで、実装時に迷いが少なくなり、作業効率が上がる。
  • 目的に合った設計の重要性: たとえば、今回の場合、デザインパターンを適用した設計を学ぶのが目的だったため、工程を飛ばすと学習効果が失われることを指摘しました。
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?