2012-02-13 83 views
1

我開始一個小項目,該項目顯示隨機半徑,隨機顏色和隨機位置在屏幕上的圓圈。我想在Objective C.實施這一使用MVC模式在目標C中應用MVC哲學

我有一個類包含以下實例變量:

  • CGFloat的半徑
  • CGPoint中心
  • 的UIColor radiusColor

該類不包含方法,它只是保存數據。它被放在一個單獨的文件中。 (Circle.m & Circle.h)

我有一個myModel應該是我的MVC模型的類。它包含在我的視圖的邊界內隨機生成中心的方法,其中在整個控制器中從View請求邊界尺寸。

每次生成一個隨機屬性(即中心,顏色和半徑)時,Circle類的一個實例將在myModel類中創建,並存儲在一個NSMutableArray中。 生成完成後,將此NSMutableArray傳遞給控制器​​,控制器將其傳遞給視圖,從而顯示圓圈。

我的問題是,如果我要正確實現MVC模式,應該:

  1. 模型(基於myModel)持有,或的實例的實例應該舉行由控制器?
  2. 我的模型由1個類組成,還是由幾個類組成是合法的?
  3. 該模型知道視圖的邊界大小還是MVC哲學中的違規行爲?

最後一個問題。如果我已經按照上面所述的方式進行實施,那麼myModelCircle單獨的模型還是兩個類構成一個模型?

謝謝!

+1

我要說的卻是你的Circle類_is_主模型類 - 並且它應該有一個'randomCircleWithinBounds:一個創建被限制了'CGRect'內圓'類方法,你會傳遞到該方法......其他那麼模型的一部分就是你的'myClass' - 你應該重新命名以符合一般的Objective-C命名約定(至少它的名字應該以大寫字母開頭)。 – danyowdee 2012-02-13 23:49:49

回答

1
  1. 如果您的模型不僅僅包含圓圈的其他組件,還包含myModel中的所有內容。即使你不這樣做,你仍然可能想這樣做,以允許將來添加。
  2. 取決於您的設計。如果您正在編寫一個「基於文檔」的應用程序(不管您是否使用UIDocument),您通常會擁有一個包含其他類的類。即使你不是,爲了歸檔目的而擁有一個單獨的根類,通常也很方便。
  3. 模型絕對不應該對視圖層次結構有任何瞭解。 (請注意,這與知道諸如「畫布大小」之類的內容不同 - 在模型中存儲這樣的屬性是合理的,並讓視圖顯示畫布(無論它希望如何),例如在UIScrollView中。)

順便說一句,提前考慮這個問題的榮譽!

2

[應]模型(myModel)是否保存Circle的實例,或Circle的實例應該由控制器持有嗎?

模型應該包含數據。這是工作。想象一下如果你想改變你的程序界面會發生什麼。除了在屏幕上繪製圓圈(或除此之外)之外,您可能還想顯示圓圈列表及其位置。您可能需要更改或替換視圖控制器來完成此操作,但不需要更改存儲圓的模型。同樣,您可能想要更改生成圈子的方式,但請按照現在的方式繼續顯示它們。在這種情況下,你會改變模型,但視圖控制器和視圖可能保持不變。

【應該】我的模型是由1個類組成的,還是由幾個類組成是合法的?

數據模型通常是對象的完整圖形,通常是不同類型的對象。你可能有一個對象來管理其餘的(儘管你不需要)。例如,您的MyModel類包含一個存儲Circle對象的數組。你可以添加廣場對象,組對象等

[應]模型瞭解視圖的綁定大小或者是 一些違反MVC中的理念是什麼?

該模型不應該詳細瞭解視圖,但視圖控制器告訴它在給定的座標範圍內產生圓是很好的。這樣,如果視圖改變大小或方向,視圖控制器可能會知道它,並且它可以反過來給模型新的信息。