表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
どこぞのプログラマの愚痴日記  作者: どこぞのプログラマ
PR
55/141

構成について ViewとController編

 引き続き構成について考えてみます。


 例えばページ遷移とかで考えてみる要求の流れ。

 ページに三つのボタンがあって、遷移先が違うパターンとか考えてみる場合。


 描画されてるのは最低限ボタン三つですね。

 で、適当にボタンを押す。

 すると画面遷移する。

 純粋な遷移動作としてはそれだけです。


 その場合、まずクリックという操作がある。

 操作をControllerが受け取り、Viewにどの位置……というかどのボタンがクリックされたか、もしくはどのボタンでもない場所がクリックされたか問い合わせる。


 ボタン外なら動作なしという動作になって動作が終了する。

 ボタン内ならどのボタンがクリックされたかを投げ返す。

 ここで例えばボタンAをクリックされたことが確定する。


 ココ。

 重要なんでもう一度、ココ。


 この『ボタンAがクリックされた』という操作は一番はじめのControllerに通知する必要があるのか? というところ。

 もし通知してはじめのControllerに画面遷移動作を突っ込むとすると別の画面遷移も全部そこに入ることになりますよね、と。

 これ、画面追加する時に死ぬんじゃねぇの、と。

 というか特定ページが持ってる三つの遷移先のページ情報をそんなControllerが知る必要はあるのか? と。


 そういう考え方をすると、完全にないんですよね。


 だから、一番はじめにくるのはControllerじゃなくてInterfaceであるべきなんです。

 Interfaceではクリックされた位置とか入力されたキーボードのキーとかキー入りっぱなしになってるかどうかとかそういう操作と、操作の通知先だけを管理するべきなんです。

 そうしないと死にます。

 主に、ページ追加した時とかに。


 じゃあどこでページ遷移動作を作るのか、と考えると、Viewに対応したControllerですべきなんです。

 Interfaceは、そのViewのControllerに対して操作を通知するだけじゃないとダメなんです。


 ということでView用のControllerを作りそこからページ遷移します。

 そこで新しいView作って自分で管理するとInterfaceの二の舞になるんで、次のView用Controllerを作って動作を引き継ぎます。

 その時にInterfaceにどのページが表示されてるか通知しないと操作が通知できなくなるので注意が必要です。


 次のControllerを作って、そちらのViewが準備できたタイミングで引き継ぎます。

 引き継ぎの際に忘れずにInterfaceに表示されてるViewのControllerが変わったことを通知します。


 次に、もしかしてコレってページ戻ったりできるの? とか考えた場合。

 もしページを戻る度に描画が変わるならViewを削除して前のControllerも消せば良い。

 もし描画が変わらないならもう一度作り直す手間が無駄になることを考えて、どこかで保持すれば良い。

 でも、Interfaceでやったらダメです。

 Interfaceはそんなデータの管理を期待されているクラスじゃないから。


 もしやるなら、ページ順を保持する配列とページ情報を保持したModelクラスを作ってそちらでやりましょう。

 多分Pagerとかそういう名前のクラスになると思います。


 私が考える構成、ViewとControllerの基本的な考え方としてはこんな感じですね。

 次回はModelとController編。

実際にはButtonクラス等が標準装備されている言語が多く、View(UserInterface)からControllerに通知するというのが一般的です。

というか最近の主流な言語なら全て標準装備されてます。

おとなしくそちらから通知を受け取りましょう。

下手に手を入れないほうが良い。


ちなみにその場合のInterfaceの役割はOSからの通知を管理することになってきますね。

起動要求があった場合にはじめのControllerを生成、描画要求を投げるところとか。

スマホだとホームに戻った時にどうするのかとか、アプリに戻ったときにどういう要求をすればいいのか、とか。

なんにしても、そこに通知先としてのControllerの方法以外のものを持つのはよろしくないな、と。

下手なものを乗せるとそこが拡張されていって膨大なコードを抱える不良債権になりかねないですから。

そうなると、バグの温床です。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ