4

Cocoaのスキルが徐々に向上するにつれて、以前の仮定によって構築された穴に戻ったときに、早い段階で行ったようにMVCを乱用しないようにしています。私はここにこれを跳ね返す人がいないので、あなたの一人が助けてくれることを願っています...

多数のさまざまなプロパティ(NSString、NSDate、NSNumberなど)を持つカスタムModelクラスがあります。送信用にプロパティをシリアル化する必要があります。このデータがシリアル化のために処理されているときに、ユーザーが応答する必要があるという質問が表示される場合があります(UIAlertViewなど)。

このコードはどこに属しているのでしょうか。

  • 私の一部は、ある意味でデータの永続性に関するものであるため、モデルと言います。
  • モデルに含まれるコアデータ(しゃれは意図されていません)の別の解釈であるため、私の一部はビューと言います。また、データが処理されるときに、ユーザーはダイアログを操作する必要があります
  • モデルとビューの間のデータの変換を管理しているので、私の一部はコントローラーと言います。

3つすべての組み合わせですか?もしそうなら、データが処理されているときにクラス間の通信はどのように処理されますか?NSNotifications?直接メソッド呼び出し?

4

4 に答える 4

1

これは、訪問者パターンを使用したいものかもしれません -- http://en.wikipedia.org/wiki/Visitor_pattern -- 最終的には、さまざまなものにさまざまな種類のシリアル化を使用したいと思うかもしれません。モデル コード内の多くの特殊なケースではなく、さまざまなビジター クラス。

ここでは、objective-c/cocoa の訪問者パターンについて説明します: http://www.cocoadev.com/index.pl?VisitorPattern

これは、objective-c の訪問者パターンに関するドブス博士の (古い!!!) 記事です: http://www.drdobbs.com/184410252

取り組んでいる問題が MVC パラダイムにうまく適合しない理由は、実行しているシリアル化がストリーム ベースのレンダリング サーフェス上のビューのようなものであり、それが表示されるためです。場合によっては、これはモデル内で非常にスムーズに実行できる場合もありますが、場合によってはより複雑な場合があり、ケースを調べて、それがどれであるかを判断する必要があります。

多くの場合、使用している送信/Web サービス (ま​​たはその他) のコードには、このデータ用の独自のハンドラーがあります。これをより一般的に行おうとしている場合は、そのコード (特に ObjectiveSupport 部分) を調べることができます。

于 2010-02-06T22:03:58.337 に答える
0

モデルにシリアル化コードを入れることをお勧めします。プロセスが失敗した場合、リッスンしているもの (ビュー/コントローラー) にそれを報告し、UIAlertView を提示して、問題を修正し、別の試みのために再送信できます。

于 2010-02-04T09:34:36.183 に答える
0

モデルで言えば。

データをシリアル化するための呼び出しは、コントローラーによって行われます。データをシリアル化できない場合、モデルはエラーを返す必要があり、コントローラーはそれを処理する必要があります。

于 2010-02-04T09:45:11.280 に答える
0

通常、ほとんどすべてのアプリケーション固有のコードはコントローラーに属します。コントローラーは、(通知を介して) モデルとやり取りして監視し、必要に応じてビューを更新する必要があります。

同じモデルを持つ別のアプリで再利用される可能性があるようなモデル処理を行っている場合、その処理はモデル内にある可能性があります。

ビューは、Interface Builder でレイアウトしたり、コードで作成したり、カスタム描画用にサブクラス化したりできますが、アプリケーション ロジックを持たせたり、モデルと直接対話したりしないでください。

于 2010-02-04T02:34:38.830 に答える