MVC - 多模型一数据

时间:2010-01-28 21:16:27

标签: model-view-controller design-patterns

例如,在IDE应用程序中,比如C#,有2个视图ClassView和TextView。

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

ClassView需要查询类,方法,属性,字段等,而Text View查询代码中的行。

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

因此,Class View需要一个模型,而Text View需要另一个模型,但底层数据是相同的。

是否有解决此类问题的设计模式?

提前致谢。

4 个答案:

答案 0 :(得分:0)

模型视图控制器:)

您的问题中的错误是您的数据实际上映射到您的模型上。

您可以拥有2个视图(classview和textview),它们都可以使用一个通用模型。当另一个视图更改模型时,Controller可以更新一个视图。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

MVC架构中没有任何内容可以阻止编写与同一底层数据存储交互的多个模型层次结构。

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

答案 3 :(得分: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
    }


}