Apple docsを参照した後、MVCパターンのこのサンプルに遭遇しました:
NSNotificationCenterを使用し、KVOを使用しない場合、以下のこの図はMVCパターンの正しい実装を表していますか?そうでない場合、何が問題で、どのように修正または改善できますか?
コントローラはメッセージを受信し、次のメソッドを実行します
BOOL rightLightOn = [rightLightData on]; if( rightLightOn ) { [rightLightImage setImage:onImage]; [leftLightSwitch setOn:NO]; } else { [rightLightImage setImage:offImage]; }
スイッチの変更により、UISwitchはコントローラーのメソッド「leftSwitchChanged」を呼び出します。
さらに、システムがスイッチを使用せず、代わりにテキスト「Turn On」または「Turn Off」を表示するUIButtonを使用していた場合はどうなりますか。スイッチはそれ自体のテキストを更新してから「rightSwitchChanged」を呼び出すのですか、それともrightSwitchChangedをすぐに呼び出してビューコントローラーがテキストを変更するのを待つのでしょうか?
はい、パターンに適合します。だが...
私はiOSの通知のファンではありません。実際、多くの場合、それらは美化された後藤として使用されます。
[model setLightOn]
を呼び出すと、ライトがオンになっているという通知をモデルが返す必要があるのはなぜですか?ついた!
もう1つの限定的なコメント:setLightOn
は不適切な名前です。 setLightOn:NO
-ライトをオフにしますか、それともメッセージを無視しますか?
要件を満たしていますか?
MVCは、そのようなすべてのソフトウェアパターンと同様に、進化します。 「正しい」または「適切な」方法はありません。
たとえば、JavaScriptライブラリをASP.NET MVCに追加して、Model-View-ViewModelを作成することができます。この場合、クライアントアクションのほとんどは実際にブラウザーで行われます。これは「より純粋な」アプローチであり、この方法で行うことには特定の利点があると主張する人もいます。
建築の宇宙飛行士になったり、誰かの「正しい道」の考えに縛られたりしないでください。うまくいきます。