【问题标题】:In the MVC pattern, what goes in the model and what goes in the view?在 MVC 模式中,什么在模型中,什么在视图中?
【发布时间】:2009-11-11 23:26:25
【问题描述】:

我正在使用MVC 模式来设计一些数据分析软件(在 Python)。我不确定某些功能是否应该放在模型或控制器中。

按照我的设计方式,用户为程序提供了一个配置文件,其中包含用于分析的参数。程序解析这个文件以找出要查看的数据文件以及要执行的计算类型。

  • 解析此配置文件的函数应该在模型还是控制器中?
  • 在使用 MVC 时,是否有标准的方式在 Python 中组织事物?我已将模型、控制器和视图放入单独的类中。控制器类包含模型和视图类的实例。
  • 模型和视图之间应该有什么样的通信?我构建事物的方式是让控制器从模型中获取内容并将其传递给视图。两者仅通过控制器进行通信。

【问题讨论】:

    标签: python model-view-controller


    【解决方案1】:

    模型应该是您的实体类,或者只是为您正在使用的问题域建模的类。并且视图基本上与您的用户如何与您正在构建的系统交互有关。控制器将两者结合。

    【讨论】:

    • 与配置文件交互的函数在理想情况下不应位于模型或控制器中,而应位于更类似于“data_access”等的目录中。然后,您的模型可能会通过 data_access 应用程序/命名空间中的对象与配置进行交互。换句话说,配置处理应该存在于模型之外,或者如果这不是一个选项,则由模型解析。
    【解决方案2】:

    首先,如果它是模型类的一部分,则解析应该在模型中进行;例如,如果您有一个配置模型,那么加载配置的功能就属于模型。如果它更像是一项服务(例如,我要导入这个文件,然后其他东西会做映射),那么它应该在 Controller 中。在不知道更多细节的情况下很难说,但这是我遵循的一般规则。

    我不确定您的第二点,因为我不熟悉 Python,但典型的方法是将您的文件夹结构分离为 Models/Controllers/Views 等,但是我只熟悉 MVC与 Web 应用程序有关,所以我可能不正确,因为您的程序似乎是桌面应用程序。

    你的第三点是完全正确的。模型不应该与视图对话;控制器与模型通信并检索视图所需的信息,然后将其提供给视图。我想本质上视图可能正在使用模型,但它对模型一无所知(例如,如果它来自数据库、配置文件、xml,等等)

    【讨论】:

      【解决方案3】:

      简单地说,模型是您的数据部分(数据库),视图是您的设计部分(HTML、CSS、JavaScript 等),而控制器是模型和视图之间的契约:)

      【讨论】:

        猜你喜欢
        • 2019-02-16
        • 1970-01-01
        • 2014-02-21
        • 2011-12-26
        • 1970-01-01
        • 2020-02-17
        • 2011-08-01
        • 1970-01-01
        • 2013-03-05
        相关资源
        最近更新 更多