さて今回から何回かにわたって、Griffon アプリケーションにて「マルチ MVC」を扱う方法を見ていきます(一覧)。 「マルチ MVC」とは、公式の用語なのかどうか知りませんが(以降、勝手に使います)、読んで字の如く、複数の MVC グループを扱うことを指します。 Griffon では、プロジェクトを作成した時点で1つの MVC グループが作成されますが、構造が複雑になってきたり、使い回したいコンポーネントがあったりした場合、新たに MVC グループを作成していくようです。
この記事では、専ら「マルチ MVC をどう構築するか」、「MVC グループ間の相互作用をどう実現するか」といったことに焦点を当てることにして、「どの部分を MVC グループとして切り出すか」といった設計レベルのことには基本的に触れません*1が、Griffon に付属しているサンプルを見る限りでは、以下の2つの場合にマルチ MVC が使われているようです:
- 1つのある程度大きなビュー(コンポーネント)内で、1つの役割をする部分を切り出す場合(サンプル:Greet の LoginPanel)
- Web ブラウザでタブ・ブラウズする際の各タブのように、同種のビュー(コンポーネント)を複数扱う場合(サンプル:FileViewer, WeatherWidget)
2つ目の使い方に関しては id:masanobuimai さんの「MVC Groupの切り替えを分かった気になってやってみた。」で扱われているので、この記事でも参考にさせて貰います。
一応の予定
一応、今後の予定。 この通りに行くかどうかは不明ではありますが*2。
- MVC グループを新規に作成する
- MVC グループをコーディングする
- アプリケーション開始時に MVC グループを作成し、ビューを埋め込む
- アプリケーション実行中に MVC グループを作成する
- アプリケーション実行中に MVC グループを破棄する
3つ目が「1つのコンポーネント内で1つの役割をする部分を切り出す」使い方、4つ目が「同種のビューを複数扱う」使い方に対応します。
関数描画アプリケーション
「マルチ MVC」の機能も前回までに作成していた「関数描画アプリケーション」に追加していきます。 MVC として切り出す部分は「関数を Groovy コードとして入力する部分」とし、MVC グループ名は「MonolineFunction」(1行の関数)とします。
見た目を変えないようにすることも可能ですが、後々のために関数を入力する部分を上部 (north) から左部 (west) へ変更します。 変更後の見た目はこんな感じ:
- 「Paint All」ボタンは前回までの「Paint」と同じく、グラフを描画するボタンです。 これは MonolineFunction グループには含めません。
- サンプル数を指定する部分は簡単のため削除。
- アプリケーション・タイトルやメニューなどが日本語化されてませんがあまり気にせずに。
MVC グループを新規に作成する
さて、今回は新たに MVC グループを作成する方法だけ見ておきます。 「MonolineFunction」グループを作成するためには、プロジェクトのルートのフォルダ下で以下のコマンドを実行します:
griffon create-mvc MonolineFunction
このコマンドを実行すると、以下の太字で示したファイルが作成(もしくはコードが追加)されます:
- FunctionPlotter
- griffon-app
- conf
- Application.groovy
- models
- functionplotter
- FunctionPlotterModel.groovy
- MonolineFunctionModel.groovy
- views
- functionplotter
- FunctionPlotterView.groovy
- MonolineFunctionView.groovy
- controllers
- functionplotter
- FunctionPlotterController.groovy
- MonolineFunctionController.groovy
- test
- integration
- functionplotter
- FunctionPlotterTests.groovy
- MonolineFunctionTests.groovy
Model, View, Controller, Tests の内容はプロジェクト作成時に生成される MVC グループのもの (FunctionPlotter) と基本的に同じです。
Application.groovy
Application.groovy には、新たに作成された MVC グループの情報が追加されます:
application { ... } mvcGroups { // この MVC グループが追加 // MVC Group for "MonolineFunction" 'MonolineFunction' { model = 'functionplotter.MonolineFunctionModel' controller = 'functionplotter.MonolineFunctionController' view = 'functionplotter.MonolineFunctionView' } // この MVC グループはもともとある // MVC Group for "FunctionPlotter" 'FunctionPlotter' { model = 'functionplotter.FunctionPlotterModel' controller = 'functionplotter.FunctionPlotterController' view = 'functionplotter.FunctionPlotterView' } }
'MonolineFunction'{ ... } の部分が追加されます。
- controller を使用しない場合は controller の行を削除するなど、必ずしも MVC の3組を作成する必要はないようです。
- 逆に、通常 View に指定する actions を別ファイルに指定する場合に、「actions = ...」などとして MVC 以外のコンポーネントを追加することもできるようです。
次回からはコーディング。
- 作者: Andres Almiray,Danno Ferrin,James Shingler
- 出版社/メーカー: Manning Pubns Co
- 発売日: 2012/06/28
- メディア: ペーパーバック
- クリック: 8回
- この商品を含むブログ (19件) を見る