GUIアプリケーションの開発スタイルに関して思いついたこと
GUIアプリのデザインパターンとして、MVCパターンが存在する*1。GUI自動生成について色々考えたときに、思いついたことを適当にメモしてみた。
Modelから設計するか、Viewから設計するか
MVCパターンの観点からGUIアプリの設計を見てみると、大きくViewから設計に入る方法と、Modelから設計に入る方法の二つがありそう。
正直、どちらも完全に分けられるものじゃない。
Viewから設計する方法は、Viewを作りながらModelの片鱗を少しずつ構築していく方法。まず画面を作成し、ボタンに対するアクションを少しずつ作りこんでいくというもの。開発のイメージとしては、ViewをGUIビルダでサクッと作成し、Viewに表示するデータの操作ロジックの作成が開発の中心となる。
メリットは以下のとおり。
デメリットは以下のとおり。
- 規模が大きくなると、スパゲティコードに陥りやすいこと
- 規模が大きくなると、開発規模が極端に増え始めること
- 画面数が多くなると、Viewに表示している値の統一性を維持するのが大変になること
- View内に、データ、ビジネスロジック、UIコントローラの機能が集まりやすく、画面クラスが肥大化しやすいこと
Modelから設計する方法は、Modelを作りながらViewの片鱗を少しずつ構築していく方法。まず、Modelとしてデータとデータに対する操作を決定し、各Modelに対してViewを作りこんでいくというもの。基本的には、Modelをサクッと作成し、Modelの状態を表示するViewの更新ロジックを作成するのが開発の中心になる。
メリットは以下のとおり。
- 開発が遅い
- 規模が大きくなっても、開発規模がそれほど大きくならない
- 画面数が多くても、値の統一性、操作の統一性を維持するのが容易
- Model/View/Controllerの分離が容易(もともと分離されやすいため)
デメリットは以下のとおり。
GUIアプリの自動生成を考えたとき、View先行型よりも、Model先行型の方が自動化が容易。これは、ビジネスロジックは開発者が決定するものだが、業務APにおいて、多くのViewは、DBのCRUD操作が主体であり、その部分のViewは定型であり、自動化が容易であるため。ただし、自動化する以上、似たような画面になることは防げない。