这是MVC吗?我使用了哪种“设计模式”?

3

很多人对MVC模式感到困惑,但是在翻阅《Head First设计模式》这本书后(顺带一提,我不喜欢这个品牌,但这个例子相当好),它声称MVC或者说是Model View Controller是多种模式的混合 - 中介者、观察者等等...

最近我做了一个原型,以下是代码示例,使用的是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吗?还是其他什么东西?
任何建议或意见都将是极好的。它可以工作 - 只是想知道为什么。
谢谢。

是的,你使用了MVC设计模式。 - Robert K
我看到一个观点(并且我同意)认为MVC不是一种设计模式,而是一种架构模式。 - THX-1138
又制作了一个原型,它确实更符合“被动视图”的设计模式。参考:http://blog.vuscode.com/malovicn/archive/2007/11/04/model-view-presenter-mvp-design-pattern-close-look-part-2-passive-view.aspx - Finglas
3个回答

2

我会投票给其他东西。

我这样说的原因是对于MVC的定义存在很多争议。

参见什么是控制器?


好的,我会将其更改为MVC的一种变体或类型。 - Finglas

2

好的,我会研究被动视图。它以前出现过,所以我会去看看。 - Finglas

1

虽然你现在所实现的是MVC,但它并没有使用微软最近发布的那个。如果你想了解更多历史和背景,请查看Scott Gutherie的概述。有些人可能会称之为MVP,其中代替Controller的部分被称为Presenter,负责处理业务逻辑和用户交互等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接