2012-02-13 16 views
1

私は、画面上にランダムな半径、ランダムな色、ランダムな位置を持つ円を表示する小さなプロジェクトを開始しています。Objective CでのMVC哲学の適用

  • CGFloat半径
  • するCGPointセンター
  • UIColor radiusColor
  • :私は、私は以下のインスタンス変数を含むクラス サークルを持って客観C.

    でMVCパラダイムを使用してこれを実装したいです

このクラスにはメソッドが含まれておらず、データを保持しています。それは別のファイルに置かれます。 (Circle.m & Circle.h)

私はmyModel私のMVCのモデルになっているクラスを持っています。バインドされたディメンションがコントローラ全体でビューから要求される、ビューの境界内にセンターをランダムに生成するメソッドが含まれています。

ランダムなプロパティ(中心、色、半径)が生成されるたびに、CircleクラスのインスタンスがmyModelクラス内に作成され、NSMutableArrayに格納されます。 生成が完了すると、このNSMutableArrayはコントローラに渡され、コントローラに渡され、サークルが表示されます。

私の質問は、私が正しくMVCパラダイムを実装していた場合、必要があることである:

  1. モデル(に、mymodel)はサークルのインスタンスを保持し、またはサークルのインスタンスを保持しなければなりませんコントローラによって?
  2. 私のモデルは1クラスから成っているか、いくつかのクラスから成り立っていますか?
  3. モデルはビューの境界の大きさを知っていますか、それともMVCの考え方に違反していますか?

最後の質問が1つあります。上記のように実装した場合、myModel別々のモデルまたは両方のクラスが1つのモデルを構成しますか?

ありがとうございました!

+1

あなたのCircleクラスはメインモデルクラスです - そして、そのメソッドに渡す 'CGRect'の中に閉じ込められた円を作成する' randomCircleWithinBounds: 'クラスメソッドが必要であると主張したいと思います。モデルの一部はあなたの 'myClass'です - 一般的なObjective-C命名規則に従うように名前を変更する必要があります(少なくとも、大文字で始める必要があります)。 – danyowdee

答えて

1
  1. サークルだけでなくモデルに他のコンポーネントがある場合は、myModelのすべてをラップします。もしあなたがいなくても、あなたは将来の追加を可能にするためにそうしたいかもしれません。
  2. デザインによって異なります。 UIDocumentを使用しているかどうかにかかわらず、 "ドキュメントベースの"アプリケーションを作成している場合は、通常、他のクラスを含む単一のクラスがあります。あなたがいなくても、アーカイブ目的のために単一のルートクラスを持つなど、通常便利です。
  3. モデルでは、ビュー階層について何も知らないはずです。 (これは、「キャンバスサイズ」のようなものを知ることとは異なります。モデルにそのようなプロパティを格納し、UIScrollViewなどのようにキャンバスを表示できるようにするのが正当でしょう。)

Btw、これについて前向きに考えてください!

2

[Should] Model(myModel)がCircleのインスタンスを保持するか、 Circleのインスタンスがコントローラによって保持される必要がありますか?

モデルはデータを保持する必要があります。それが仕事です。あなたのプログラムにインターフェイスを変更したいと思ったらどうなるか想像してみてください。画面上に円を描く代わりに(またはそれに加えて)円のリストとその位置を表示したい場合があります。ビューコントローラを変更または置換して、そのようにすることもできますが、サークルを格納するモデルを変更する必要はありません。同様に、サークルの生成方法を変更することもできますが、現在の方法で表示することができます。その場合、モデルを変更しますが、ビュー・コントローラーとビューはおそらく同じままです。

[Should]私のモデルは1クラスで作られているか、いくつかのクラスから成り立っていますか?

データモデルは、通常、オブジェクトのグラフ全体であり、非常に頻繁に異なるタイプです。あなたは残りの部分を管理するオブジェクトを1つ持っているかもしれません(ただし、そうする必要はありません)。たとえば、MyModelクラスにはCircleオブジェクトを格納する配列が含まれています。あなたは、などの広場オブジェクト、グループオブジェクトを、追加することができ

モデルはビューの境界サイズを知っているかということ ものです[べき]そのMVCの哲学の違反?

このモデルでは、ビューの詳細はわかりませんが、View Controllerは指定した座標範囲内で円を生成するように指示しても問題ありません。このようにして、ビューがサイズまたは方向を変更した場合、ビューコントローラはそのことを知り、モデルに新しい情報を与えることができます。