代码之家  ›  专栏  ›  技术社区  ›  Steven Evers

这是对MVC的正确解释吗?

  •  1
  • Steven Evers  · 技术社区  · 15 年前

    假设您有一个客户对象和一个“客户文件”表单来操作该对象。以下是对MVC的正确解释吗?

    Customer - Model
    CustomerForm.cs - Controller
    CustomerForm.desinger.cs - View
    

    尽管customerform.cs和customerform.designer.cs是同一类的部分,但从我对MVC的了解来看,这似乎是有意义的。

    1)视图和控制器通常(如果不总是)紧密耦合。

    2)该视图设置所有内容的“外观”(即用户控件属性)

    3)UI行为在控制器中完成(通过事件处理程序和任何手动数据绑定显示)

    4)模型中应该存在域逻辑(我假设customer.cs实现IDataErrorInfo、InotifyPropertiesChanged等内容)。

    我之所以这样问是因为我看到了一两个断开连接:当通过设计器使用数据绑定时,我希望在customerform.cs中发生类似的事情,并监听/响应inotifyPropertChanged事件。但一般来说,这是准确的吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Matthew Groves    15 年前

    是的,你掌握了要点。视图和控制器不一定是强耦合的,因为您可以有一个由几个不同的控制器呈现的视图,反之亦然,也可以有部分视图。MVC不做WebForms意义上的数据绑定,因此最好让您的对象自己获取所需的数据,或者使用类似于NHibernate的ORM和存储库设计模式。

        2
  •  0
  •   J.R. Garcia    15 年前

    MVC是关于关注点分离(SOC)的。通常,您将域模型作为模型(示例中的客户类)。然后你就有了你的控制器。控制器将模型连接到视图。例如,您可以调用数据访问层来获取信息并将其发送到视图。视图只是一个HTML页面,它获取从控制器发送的信息并呈现出来。

    例子:

    customer.cs将具有名称、地址、公司等属性。customerController.cs将具有类似list的方法,将模型连接到视图。通常,您会有一个使用存储库模式的单独数据访问层(具有类似nhibernate或subsonic的内容)。list.aspx将具有显示传递给它的信息的HTML。那你就给我打电话 http://domain.com/Customer/List 查看客户列表。