如何在混合后将控制器与模型分开?

时间:2011-10-24 04:18:44

标签: c# model-view-controller design-patterns

我不确定这是否只是一个MVC模式,但我想要做的是将所有数据层(简言之,所有将被序列化为XML文件)分开,动作。仅仅为了它而实现MVC实际上不是我的目标。所以,如果这不完全是MVC,我对此很好。

比如说,我有这些类(这些只是示例类,试图说明我的问题,而不是我的实际类):

public class MixedSubClass
{
    public string SomeData {get;set;}

    public void DoSomeActionWhichRequiresControls(Control someControl)
    {
        // do stuff            
    }
}

public class MixedClass
{
    private Control _SomeControl;

    public List<MixedSubClass> _SubClasses = new List<MixedSubClass>();
    public List<MixedSubClass> SubClasses { get { return _SubClasses; } }

    public MixedClass(Control someControl)
    {
        _SomeControl = someControl;
    }

    public void DoSomeMoreActionsWhichRequiresControls()
    {
        foreach (var subClass in SubClasses)
        {
            subClass.DoSomeActionWhichRequiresControls(_SomeControl);
        }
        // Do more stuff
    }
}

因此,当我序列化MixedClass时,只有公共字段被序列化,这就是我想要的。但现在我想拥有一个唯一的数据层,甚至不需要Windows.Forms程序集。我想留下来:

public class MixedSubClass
{
    public string SomeData {get;set;}
}

public class MixedClass
{
    public List<MixedSubClass> _SubClasses = new List<MixedSubClass>();
    public List<MixedSubClass> SubClasses { get { return _SubClasses; } }
}

将所有这些都放入一个独立的组件中。但我现在的问题是如何将其转回到前一个方面。我认为第一件事是使用扩展方法,但正如您在我的示例代码中所看到的,有时我需要存储一些不可序列化的值,例如Control _SomeControl。另外,在现实生活中,这些列表是列表,树和更复杂的东西,所以我在开始之前需要一些良好的基础(实际上我已经有一个项目,我的所有数据层本身编译良好,没有{ {1}},但现在我无法将它重新组合在一起。

你会怎么处理这个?我不应该这样分开数据层吗?

1 个答案:

答案 0 :(得分:0)

到目前为止,我认为你做得很好。您的数据层应该绝对没有对UI控件的引用(无论它们是winform,web等)。

虽然很难根据您发布的内容提供精确的代码示例,但您需要添加一组类似控制器的类,将您的数据(也称为模型)映射到用户界面(也称为视图)。它们应该包含对数据和UI对象的引用,并且是执行被剥离的工作的引用(DoSomeActionWhichRequiresControls)。