構造とデータ配置

  • 物理的な構造と、クラス・データ構造をそろえる。
  • 処理クラスが駆動元クラスに配置されているかを常に確認する。
  • メソッドを作成するときは処理対象のデータがあるクラスに作る。
  • クラスやメソッドに引き渡すデータは必要なときに必要な分だけを渡すようにする。

下記の様な仕様の、左半分がツリービュー、右半分が詳細表示用DataGridViewで構成されたフォームについて考えてみる。

  • ツリーのノードを選択するとグリッドにノードが表す項目に対応する詳細情報が表示され閲覧・編集が可能。
  • 別ノードを選択したときには、現在のグリッドに紐付けられている詳細情報に対してエラーチェックを行う。チェックの結果がfalseの場合は、エラーメッセージを表示し、グリッドを切り替えない。
  • データはツリー・ノードが持っている。グリッド表示する際にノードからデータへの参照が渡され表示される。
最初、データチェッカーをグリッドセルのTagに格納していた。
この場合だと、グリッド切り替えイベントでは、グリッドの全セルにアクセスして
チェッカーとデータの取得・チェックという若干ややこしい処理になる。
チェック処理駆動元クラスである、各ノードクラスにチェッカを配置すれば
自身が持っているチェッカー、データを使ってチェックするだけで済む。
この処理はグリッドセル値に対して行うのではなく、実値に対して行うものである。
グリッドセル編集後に発生するチェック処理を新たに追加する場合は、各セルにチェッカーを追加させるのが構造的にも適切と思う。