2010-07-21 149 views
0

我有一個三角形類。每個三角形有三個邊a,b和c,還有三個角度angleA,angleB和angleC。除了大小(長度或角度)之外,每個數據還存儲它是由用戶輸入還是基於與其他數據的幾何關係進行計算。iPhone - 當視圖層次結構與模型層次結構具有並行結構時應用MVC

對應於我的Triangle類,我有一個TriangleSidesAndAnglesView。這個觀點有六個子視圖 - 每個角度一個,每個邊一個。子視圖的內容取決於模型類中的信息。子視圖都是TriangleDatumView類。

信息可以通過雙向傳遞。例如,如果用戶在與邊緣或角度對應的文本字段中輸入內容,則需要將輸入的值傳遞給模型。

我想弄清楚如何保持組織的一切。例如,TriangleDatumView對象是否應該包含對模型類中各個相應成員的引用? TriangleSidesAndAnglesView是否需要保留哪個TriangleDatumView對應於哪個模型對象的表?如果邊緣b的TriangleDatumView知道它所顯示的邊的名稱是「b」,那麼它每次都可以寫「b =」。 。 。還是從模型中獲取信息?

這裏沒有什麼是根本的困難。挑戰是以合理的方式組織這一切。

感謝您的任何幫助。

回答

0

我問自己的一個問題是「我希望能夠獨立地改變什麼?」 - 意思是說,如果我有一個模型,我可以想象對同一個模型完全不同的相同接口實現或完全不同的視圖。在我關心的變化中,什麼需要在哪裏。

所以,如果標籤總是A,B和C - 我沒有理由在模型中存儲標籤。如果他們可以改變,那麼是的,你不應該在視圖中對它們進行硬編碼。

MVC中的視圖通常具有與他們正在查看的模型相關的引用。有時候,控制者是一箇中介。模型通常不應該包含對視圖的引用 - 而是使用諸如委託之類的東西來警告對其狀態的更改。

我在「做最簡單的工作,不要重複自己,必要時重構」陣營。一開始就在複雜性方面進行構建的問題在於,它可能在錯誤的軸上很複雜 - 讓功能指示接口的增長方式。

+0

標籤不變,但模型確實需要知道哪個邊對應於哪個頂點,即A與a相反。所以將它們存儲在那裏很有用。問題是視圖是否應該存儲它,或者包含對模型的引用並從那裏抓取。 – 2010-07-21 20:08:21

0

視圖控制器可以位於模型和視圖之間,管理一系列TriangleView實例。控制器根據模型中的內容添加,修改和刪除視圖,並根據對父視圖的更改(鍵入文本字段,敲擊和拖動以及其他UI操作等)對模型實例執行相同的操作。