【问题标题】:MVC, collection owner in the model or the controller ?MVC,模型或控制器中的集合所有者?
【发布时间】:2012-02-23 08:11:34
【问题描述】:

这个问题是概念性的,围绕 OOP 中的 MVC 模式。情节如下:我们在一个富客户端应用程序中,它与 REST Web 服务一起工作。我们向服务器上的资源发出 GET 请求,服务器返回 XML 格式的响应。响应看起来像一个 RSS 提要。 客户端应用程序需要将此 XML 解析并显示为可读的 mod。

我制作了一个模型对象,它基本上反映了一个服务器数据库表,我还有一个解析器和一个视图控制器(显然还有一个视图)。

这是它今天的工作方式。 视图控制器告诉解析器开始解析,解析器(SAX 类型)读取 XML,并实例化模型对象并在其属性中加载详细信息。每次解析器完成一个项目时,它都会通过委托方法通知视图控制器。它将解析的项目(类型是模型对象)发送到视图控制器。视图控制器将此项目添加到集合中。

当解析器完成对 XML 的解析后,它会通知视图控制器,然后视图控制器读取集合中的每个项目并构建视图。

这是我的问题。

  1. 这是一个好的实现吗?
  2. 我认为收藏所有者应该直接是模特,所以 视图控制器要求模型开始解析,解析器 通知模型而不是视图控制器,最后模型将集合发送回视图控制器。这样更好吗?
  3. 我应该合并模型和解析器吗?

【问题讨论】:

    标签: model-view-controller oop model implementation conceptual


    【解决方案1】:

    以下是关于您的问题的一些要点:

    1. MVC 有多种变体。对于模型或控制器是否应该通知视图状态变化或事件没有严格的规定。这一切都取决于应用程序的具体情况。
    2. Parser 和 View 之间的通信,您首先描述的方式,可能不是正确的方式。最好让视图获得一个填充的集合,而不是与解析器来回通信来构建它。这不是 View 的工作。此外,将单个功能(如构建集合)分散到多个组件中也不是一个好习惯。
    3. 是在模型中包含解析器,还是有一个单独的组件,解析器?我建议您将模型与应用程序的其他部分隔离开来(例如,视图需要显示它等)。在这种隔离中,看看解析是否自然属于模型。如果是这样,则将其包含在模型中。否则,使其成为一个单独的组件。我的猜测是它不属于 Model,应该是一个单独的组件。

    【讨论】:

    • 感谢您的评论。没错,MVC 有多种变体,而且非常灵活,它确实取决于应用程序。
    【解决方案2】:

    模型通常不会自行创建。控制器调用从模型返回一个或多个对象的存储库。你可以阅读更多关于repositorypattern的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多