【问题标题】:Which project structure is correct as per MVC? [closed]根据 MVC,哪个项目结构是正确的? [关闭]
【发布时间】:2014-01-08 13:13:46
【问题描述】:

我注意到像 flask 这样的框架通常有一个名为 views 的模块来容纳:

@app.route('/')
def index():
   return render_template('index.html')

定义类型,然后jinja2 模板位于templates 目录下,但是许多node.js 框架(sails、geddy、locomotive)倾向于将.ejs 模板放在views 中目录而不是 templates 目录。

这似乎不应该是主观的;根据MVC 模型,哪个是正确的?模板文件应该在视图目录下还是应该在 url 处理程序定义下?据我所知,flask 应用程序似乎有正确的views 定义;如果确实如此,flask 控制器是从哪里来的,或者这些定义控制器也是?

【问题讨论】:

  • 绝对没有标准,因为 MVC 只是一种跨语言和平台模式,而不是实现规范。我通常遵循特定的 MVC 库对结构的建议。
  • Flask 不是 MVC 框架。 views.py 已成为一种常见做法,但这不是必需的。 templates 是模板的默认位置,尽管可以使用 template_folder 参数进行更改。

标签: node.js model-view-controller flask sails.js web-frameworks


【解决方案1】:

对于像 Flask 或 Django 这样的框架,他们更愿意使用 MVT(模型/视图/模板),但它与 MVC 相似,但术语不同。不同之处在于 MVT 中的“T”代表 Template,它实际上是 MVC 中的 Controller。所以 Flask 中的 View 和 Controller 是一样的。

因此,不要将其视为模板与视图,而是专注于您仍然拥有 3 个组件的部分:模型、业务逻辑(视图/控制器等)、视觉效果(模板/html 等)

【讨论】:

    【解决方案2】:

    没有对错之分,MVC 模式为您提供了关注点分离的指导方针,它没有告诉您如何命名或组织事物。

    这是我认为 MVC 组件映射到 Flask 应用程序的方式:

    • M 是最容易理解的,因为模型非常明确。有时并不完全清楚的是,模型不仅仅是数据库抽象,应用程序的业务逻辑也是模型的一部分。

    • V 涵盖了表示逻辑。在一个设计良好的 Flask 应用程序中,这是通过模板处理的,所以我会说 MVC 模板 == V。

    • C 覆盖了一个薄层,它根据从用户收到的输入更新 M 和 V。在 Flask 应用程序中,这些是请求处理程序,它们具有“视图函数”这个有点误导性的名称。当视图函数完成时,它会向用户返回一个更新的视图(渲染模板)。

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 2010-11-04
      • 2016-11-05
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2015-05-19
      • 1970-01-01
      相关资源
      最近更新 更多