2010-01-28 75 views
0

例如,在一個IDE應用程序中,比如說C#,有2個視圖是ClassView和TextView。MVC - Multiple Model One Data

在ClassView我們需要顯示以分級的方式,其中,如在TextView中示出了用於該類代碼的類信息。

ClassView中需要查詢類,方法,屬性,字段等,而文本視圖的查詢中的代碼行。

這兩個視圖都是可編輯的。一種觀點的變化也應反映在另一種觀點上。

因此類視圖需要一個模型和文本查看需要另一個但基礎數據是一樣的。

有沒有解決這樣一個問題的設計模式?

在此先感謝。

回答

0

互動肯定是一個MVC模型可以是分層的。如果您的數據全部包含在單個文件中,那麼您的應用程序可能並不需要多個模型?如何:

namespace MyNamespace 
    { 
    public class CodeFile 
    { 
     /// <summary> 
     /// A list of contained classes for the Class view 
     /// </summary> 
     public List<CodeClass> Classes { get; set; } 
     public CodeFile() 
     { 
      Classes = new List<CodeClass>(); 
     } 
     public string ToString() 
     { 
      // send output to Text view 
     } 
    } 

    public class CodeClass 
    { 
     public string ClassName {get; set;} 
     public List<CodeProperty> Properties {get; set;} 
     public List<CodeMethod> Methods {get;set;} 
     public CodeClass(string className) 
     { 
      ClassName = className; 
      Properties = new List<CodeProperty>(); 
      Methods = new List<CodeMethod>(); 
     } 
    } 

    public class CodeMethod 
    { 
     public string MethodName { get; set; } 
    } 

    public class CodeProperty 
    { 
     public string PropertyName 
    } 


} 
0

模型視圖控制器:)

你的問題的錯誤是,你的數據是實際映射你的模型。

你可以有2次(類視圖和TextView的),他們的作品都用一個單一的通用模型。當另一個視圖改變模型時,控制器可以更新一個視圖。

0

您自己與MVC標記它...底層數據模型,類視圖和文本視圖充當視圖/控制器。該模型將事件發送到其視圖,以確保一個視圖中的更改反映在另一個視圖中。

0

在MVC體系結構中沒有任何東西阻止編寫與相同底層數據存儲交互的多個模型層次結構。

你只擁有控制器/瀏覽次數與模型的互動,以及不同的控制器/瀏覽次數與模型B

+0

感謝您的快速反應。 所以當模型A改變時(通過視圖A),誰告訴視圖B更新自己。我的意思是以下是正確的。 查看A告訴Ctrl'er A告訴模型A更改一些數據。模型A告訴Common模型來改變數據。通用模型告訴所有註冊的觀察者(在這種情況下模型B)來更新視圖。模型B通知Ctrl'er B通知視圖B更新。 – Ajay 2010-01-28 22:05:13

+0

@Ajay:也許我在你的問題中缺少了一些東西,但Model只不過是你目前存在的基礎業務數據的邏輯表示,通常在某個數據庫中。如果底層數據發生了變化,那麼它會跟隨代表該數據的模型類實例進行更改。如何實現的細節取決於數據存儲的性質,模型A是否知道關於模型B的任何內容,這是發生在一個進程還是多個進程中,哪種語言,平臺等等。 – 2010-01-29 06:41:13

+0

數據是一個簡單的文件。所有型號都在相同的過程中。語言:C#,平臺:.NET。 我想知道的是在相同數據有多個模型的情況下,無論這些模型是否可以告訴其他模型有關數據的變化。 MVC模式是否允許這樣做,或者是否有任何其他更好的工作模式。 也可以MVC模式分層。即一個模型是另一個模型的模型。 E.g. Data-> Model A-> Model 1-> View 1 Data-> Model A-> Model 2-> View 2 – Ajay 2010-01-31 08:45:08