GUIアプリケーションの開発スタイルに関して思いついたこと

GUIアプリのデザインパターンとして、MVCパターンが存在する*1GUI自動生成について色々考えたときに、思いついたことを適当にメモしてみた。

Modelから設計するか、Viewから設計するか

MVCパターンの観点からGUIアプリの設計を見てみると、大きくViewから設計に入る方法と、Modelから設計に入る方法の二つがありそう。
正直、どちらも完全に分けられるものじゃない。

Viewから設計する方法は、Viewを作りながらModelの片鱗を少しずつ構築していく方法。まず画面を作成し、ボタンに対するアクションを少しずつ作りこんでいくというもの。開発のイメージとしては、ViewをGUIビルダでサクッと作成し、Viewに表示するデータの操作ロジックの作成が開発の中心となる。

メリットは以下のとおり。

  1. 開発が早いこと
  2. 規模が小さい場合、コード量が少なくできること
  3. GUIライブラリの機能をそれほど知らなくても開発できること
  4. GUIビルダ的なものでの開発が容易なこと

デメリットは以下のとおり。

  1. 規模が大きくなると、スパゲティコードに陥りやすいこと
  2. 規模が大きくなると、開発規模が極端に増え始めること
  3. 画面数が多くなると、Viewに表示している値の統一性を維持するのが大変になること
  4. View内に、データ、ビジネスロジック、UIコントローラの機能が集まりやすく、画面クラスが肥大化しやすいこと

Modelから設計する方法は、Modelを作りながらViewの片鱗を少しずつ構築していく方法。まず、Modelとしてデータとデータに対する操作を決定し、各Modelに対してViewを作りこんでいくというもの。基本的には、Modelをサクッと作成し、Modelの状態を表示するViewの更新ロジックを作成するのが開発の中心になる。

メリットは以下のとおり。

  1. 開発が遅い
  2. 規模が大きくなっても、開発規模がそれほど大きくならない
  3. 画面数が多くても、値の統一性、操作の統一性を維持するのが容易
  4. Model/View/Controllerの分離が容易(もともと分離されやすいため)

デメリットは以下のとおり。

  1. GUIライブラリの機能を把握しておく必要がある
  2. 規模が大きくなると、スパゲティ参照に陥りやすい
  3. 規模が小さくても、コード量が一定以下に減らない
  4. GUIビルダとの相性があまり良くない

GUIアプリの自動生成を考えたとき、View先行型よりも、Model先行型の方が自動化が容易。これは、ビジネスロジックは開発者が決定するものだが、業務APにおいて、多くのViewは、DBのCRUD操作が主体であり、その部分のViewは定型であり、自動化が容易であるため。ただし、自動化する以上、似たような画面になることは防げない。