Model view controller MVC-多模型一数据

Model view controller MVC-多模型一数据,model-view-controller,design-patterns,Model View Controller,Design Patterns,例如,在IDE应用程序中,例如对于C#,有两个视图ClassView和TextView 在ClassView中,我们需要以分层的方式显示类信息,在TextView中显示该类的代码 类视图需要查询类、方法、属性、字段等,而文本视图需要查询代码中的行 两个视图都是可编辑的。一个视图中的更改也应反映在另一个视图中 因此,类视图需要一个模型,文本视图需要另一个模型,但底层数据是相同的 有没有一种设计模式可以解决这样的问题 提前感谢。模型视图控制器:) 问题中的错误在于数据实际上映射到了模型上 您可以有两

例如,在IDE应用程序中,例如对于C#,有两个视图ClassView和TextView

在ClassView中,我们需要以分层的方式显示类信息,在TextView中显示该类的代码

类视图需要查询类、方法、属性、字段等,而文本视图需要查询代码中的行

两个视图都是可编辑的。一个视图中的更改也应反映在另一个视图中

因此,类视图需要一个模型,文本视图需要另一个模型,但底层数据是相同的

有没有一种设计模式可以解决这样的问题

提前感谢。

模型视图控制器:)

问题中的错误在于数据实际上映射到了模型上


您可以有两个视图(classview和textview),它们都适用于一个通用模型。控制器可以在另一个视图更改模型时更新一个视图

您自己用MVC标记了它。。。底层数据是模型,类视图和文本视图充当视图/控制器。模型向其视图发送事件,以确保一个视图中的更改反映在另一个视图中。

MVC体系结构中没有任何东西可以阻止编写与同一底层数据存储交互的多个模型层次结构


您只需要与模型A交互的控制器/视图,以及与模型B交互的不同控制器/视图。

当然,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
    }


}
名称空间MyNamespace
{
公共类代码文件
{
/// 
///类视图包含的类的列表
/// 
公共列表类{get;set;}
公共代码文件()
{
类=新列表();
}
公共字符串ToString()
{
//将输出发送到文本视图
}
}
公共类编解码器
{
公共字符串类名{get;set;}
公共列表属性{get;set;}
公共列表方法{get;set;}
公共编解码器类(字符串类名称)
{
ClassName=ClassName;
属性=新列表();
方法=新列表();
}
}
公共类编码方法
{
公共字符串MethodName{get;set;}
}
公共类CodeProperty
{
公共字符串PropertyName
}
}

感谢您的快速回复。所以,当模型A发生变化时(通过视图A),谁会告诉视图B进行自我更新。我的意思是下面的说法正确吗。视图A告诉Ctrl'er A告诉模型A更改一些数据。模型A告诉公共模型更改数据。公共模型告诉所有注册的观察者(在本例中为模型B)更新视图。模型B通知Ctrl'er B通知视图B进行更新。@Ajay:也许我在你的问题中遗漏了什么,但模型只不过是当前存在的底层业务数据的逻辑表示,通常在某个数据库中。如果基础数据已更改,则表示该数据的模型类实例后面的数据也将更改。如何实现这一点的细节取决于数据存储的性质,模型A是否了解模型B,这是在一个进程中发生的还是在多个进程中发生的,是哪种语言、平台等。数据是一个简单的文件。所有模型都处于相同的过程中。语言:C#,平台:.NET。我想知道的是,在同一数据有多个模型的情况下,这些模型是否可以告诉其他模型数据的变化。MVC模式是否允许这样做,或者是否有其他模式做得更好。MVC模式也可以是分层的。i、 e.一个模型是另一个模型的模型。例如:数据->模型A->模型1->查看1数据->模型A->模型2->查看2