2009-12-30 63 views
0

我想學習我的第一個編程語言。不幸的是我選擇了Iphone開始。認爲這很容易...... ooops。無論如何,4周後,我實際上已經有幾個工作的應用程序!那種......正確的面向對象的應用程序設置

我的一個應用程序,有一對夫婦的文本框和一對夫婦的標籤。 每個人都有一個按鈕,可以啓動一個計時器,遞減倒數的標籤文本。

我有火遞增的變量兩種不同的方法2個獨立的計時器,播放一首歌曲,更新一些相對於每個人的標籤等。不代表大量的代碼發生戰爭,但足以不想在每次我想出如何去做新的事情時都不得不改變這兩套。

什麼是更好的方式來設置這使我可以只用一組每人代碼工作?我把整個「人」看作一個對象的想法,它應該是它自己的類,並且我應該從我所做的所有閱讀中對它進行分類。我只是不知道如何實際應用它與實際的代碼。

回答

2

我覺得第一個開始的地方是實現一個網絡接口的定時器(幾乎總是)的一部分,而不是數據模型的一部分。除非你有一些非常奇怪的要求,否則定時器不應該與你的人員數據對象相關。

您希望在數據和界面之間保持嚴格的分離。這是嚴重錯誤Model-View-Controller模式背後的關鍵想法。它應該被稱爲Model-Controller-View來反映控制器在模型和視圖之間進行調解。

就你而言,這聽起來像你有一個人物對象,它是你的數據模型。理想情況下,該模型不會直接鏈接到任何特定的界面。一個好的數據模型可以與標準視圖,Web視圖甚至基於文本的命令行界面一起工作。它與模型無關,因爲它只涉及存儲或操作數據,而不考慮如何顯示或使用數據。

更新接口的定時器屬於控制器,因爲它們與數據無關。顯示在不同接口中的相同數據需要不同的定時器。您可能只需要一個定時器,它只是在控制器中調用一個方法,根據需要更新所有界面元素。在該方法中,控制器從數據模型中的相應對象(您的案例中的人員類的實例)中獲取它需要顯示的數據。

例如,假設您有多個人物對象,每個人都有自己的倒數數字。您將倒數值存儲在人物對象中作爲屬性。控制器中的單個計時器每秒會觸發一次,並在控制器中調用一個方法。然後該方法會詢問每個人的倒計時值。在被詢問值時,人物對象會自動遞減倒數值。

使用此設計,您可以處理任意數量的人物對象,每個人物都有自己的倒數屬性,控制器中只有一個計時器和一個方法。

+0

這就是我正在尋找的答案!非常感謝! – 2009-12-31 12:10:22

+1

如果是這樣的答案,您應該點擊旁邊的複選標記,以便系統知道問題得到了解答。 – TechZen 2009-12-31 16:30:06

+0

感謝您的領導!這是我問過科技網站的第一個問題!我應該在幾周前來這裏! – 2009-12-31 16:34:22

0

我們可以談幾個小時甚至幾個月和幾年的面向對象設計。設計原則的存在是因爲他們最好的學習和掌握,通過經驗和大量的實踐。

如果您需要2個定時器,每一個調用1種方法發揮了獨特的作用,那麼你很可能受困於2個定時器。如果您的兩個計時器中有共同的任務/職責,您可以創建一個抽象計時器來實現這些常見任務,並將其擴展爲更具體的行爲(方法實現)。

我發現基於角色的設計在許多情況下,有益的,但正如我所說的,你將不得不練,當然知道面向對象和繼承的基礎知識。

相關問題