这是MVC吗?我使用了什么'设计模式'?

时间:2009-05-26 17:09:18

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

对MVC存在很多困惑,但是在浏览了Head First模式书之后(作为旁注,我讨厌该品牌,虽然这个例子相当不错)但它声称MVC或模型视图控制器是多种模式的混合体 - 调解员,观察员等......

在最近的原型中,我做了以下操作,它是C#,但应该很简单。

Person : IPerson {
    public Name { get; set;}
    public Age  { get; set;}
}

IPerson只是一个定义上述内容的界面 - 为了简单起见,我把它留了下来。

PersonController : IPersonController {
    public event DetailsUpdated;
    public void SetAge(int age);
    public int GetAge();
    public void SetName(string name);
    public string GetName();
}

我知道上面可能是属性本身 - 但这只是一个简单的例子。每次有些数据发生变化时都会触发事件 - 例如在SetAge / SetName。

interface IView {
    void Initialize();
    void SetAgeClicked(object sender, EventArgs e);
    void SetNameClicked(object sender, EventArgs e);
}

初始化电线 - 例如表格上的文本框。 SetAge / SetName是按钮事件 - 因此表单/页面等..使用必须具有这些方法。

Form : IView {

    // IView is implemented.
    // Form is wired up
    // Initialize is set etc...
}

我听说MVC的测试是当你添加一个新的视图时,它很容易得到启动和运行 - 好吧是的。但是,这是MVC吗?这是别的吗?

任何建议/意见都会很棒。它有效 - 它只是想知道为什么。

感谢。

3 个答案:

答案 0 :(得分:2)

我会投票给别人。

我之所以这么说是因为关于MVC的内容存在很多争论。

请参阅What's a controller anyway?

答案 1 :(得分:2)

我想说你的MVC(Model-View-Presenter)比MVC更像。 MVP主要有两种......监督控制器和被动视图。你在这里看到的最接近Passive View,这是一个非常经典的MVP实现,人们用它来改进和抽象WebForms。您可以在此处阅读有关WebForms的MVP实现的更多信息:

http://haacked.com/archive/2006/08/09/ASP.NETSupervisingControllerModelViewPresenterFromSchematicToUnitTestsToCode.aspx

同样的一般想法也适用于Windows Forms。

答案 2 :(得分:1)

虽然这是MVC的实现,但它没有使用one Microsoft made and recently released。来自Scott Gutherie的Overview of it,如果你想要一些历史。有些人可能将其称为MVP而不是Controller,该部分称为Presenter,通常用于处理业务逻辑和用户交互。