2010-02-25 70 views
1

我只想確保我正朝着正確的方向發展,構建一個簡單的MVC應用程序。簡單的MVC設置/設計?

// MODEL 
@interface Reactor: NSObject { 
    NSNumber *temperature; 
    NSString *lastInspection; 
    NSNumber *activeRods; 
} 

// CONTROLLER 
@interface viewController: UIViewController { 
    UITextField *tempTextField; 
    UITextField *inspectTextField; 
    UITextField *activeTextField; 
    Reactor *reactor; 
} 
@property ... 
... 
-(IBAction)ButtonPressed; 
@end 

我是否正確地在控制器中聲明reactor(dataModel)?我看到它的方式,控制器位於[VIEW]和[MODEL]之間,所以它需要鏈接到兩者。

[VIEW]通過「IBActions」鏈接到[CONTROLLER]中實現的方法,該方法又將消息發送到[MODEL]中的方法。 [MODEL]執行任何所需的處理/數據操作,將任何所需結果發送回[CONTROLLER],然後[CONTROLLER]可用於更新[VIEW]。

這聽起來很明智嗎?

加里

回答

5

你可以冒這個一個非常小的,簡單的模型,但你真的不應該發展它作爲一種習慣,因爲這種方法會破壞作爲你的項目規模不斷擴大。

當你有一個應用程序的兩個或多個視圖都將數據輸入和輸出模型時會發生什麼?當您有多個視圖的應用並從URL獲取數據時會發生什麼?如果你想在html甚至命令行界面中使用數據模型會發生什麼。當你想要在另一個應用程序中完全使用數據模型時會發生什麼?

如果你要寫嚴肅的代碼,將有成千上萬的用戶,多個版本和可能的衍生品,你需要儘早養成良好的習慣。

數據模型的最佳方法是創建一個單例來保存它。我會建議創建一個通用的單例類,然後將任何特定項目的模型作爲該類的一個子類。這樣你就可以從應用程序的任何位置訪問整潔的模型。

第二個最好的方法是將數據模型對象停放在應用程序委託中。但是,隨着項目規模的擴大,這可能會變得不合時宜。

它肯定不會幫助我所看到的每一條教學/輔導信息都會忽略數據模型,而傾向於教您如何爲界面做眼睛糖果。數據模型只是簡單的數組,或者一些這樣的控制器側面。

相信我,您不希望發展和發展您的應用程序的噩夢,只發現其數據模型邏輯和數據分散在十幾個視圖控制器。咬緊牙關,從一開始就正確做到這一點,你永遠不會爲它出汗。

Edit01:

單身,我將不得不做一些 研究,你可以解釋一下你將如何 訪問從 [控制器]?只是好奇 [MODEL]再次進入AppDelegate 你將如何從 [CONTROLLER]訪問它?

您將車停在由(1)使數據模型中的應用程序委託的數據模型對象中的應用程序委託,並使用該應用代表全局引用形式(2)的性質:

MyDataModelClass *theModel=[[UIApplication sharedApplication] delegate] dataModelProperty]; 

創建singletonlittle more involved。你像使用NSFileManger一樣使用它。你會以同樣的方式引用它。

NSFileManger *fm=[NSFileManager sharedInstance]; 

這可確保只有一個文件管理器在應用程序中處於活動狀態。您可以通過與控制器相同的方式調用數據模型:

MyDataModelClass * theModel = [MyDataModelClass sharedInstance];

如果您仔細設計數據模型對象,使其可以完全控制寫入的信息,那麼可以安全地在任何位置使用它,而不必擔心數據會被粗心的代碼行丟棄。

+0

謝謝,這正是我所遇到的問題,似乎有很多關於[視圖]和[控制器]的信息,但是當涉及到[模型]時,它通常太簡單而無法使用。 – fuzzygoat 2010-02-25 20:55:53

+0

辛格爾頓,我將不得不做一些研究,你能否解釋一下你將如何從[CONTROLLER]訪問?只是好奇,如果[MODEL]再次進入AppDelegate,你將如何從[CONTROLLER]訪問它? – fuzzygoat 2010-02-25 21:01:27

+0

查看我的編輯的詳細信息。 – TechZen 2010-02-26 04:02:01

1

你是對的模型應該存儲所有業務相關的對象,他們可以通過控制器進行修改,視圖根據用戶操作在控制器上進行調用。