根据MVC,哪个项目结构是正确的?

时间:2014-01-08 13:13:46

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

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

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

定义类型然后jinja2模板位于templates目录下,但是很多node.js框架(sails,geddy,locomotive)倾向于放置{{1}相反,.ejs目录中的模板没有views目录。

这似乎不应该是主观的;根据{{​​1}}模型,这是正确的吗?模板文件应该在views目录下还是url处理程序定义?据我所知,templates应用程序似乎有MVC的正确定义;如果实际上是这样的话,那么烧瓶控制器会在哪里进入,或者这些定义控制器也是这样?

2 个答案:

答案 0 :(得分:3)

对于像Flask或Django这样的框架,他们更喜欢使用MVT(模型/视图/模板),但除了术语之外,它与MVC类似。区别在于' T'在MVT中代表模板,它实际上是MVC中的控制器。因此Flask中的View与Controller相同。

因此,不要将其视为模板与视图,而应关注您仍有3个组件的部分:模型,业务逻辑(视图/控制器等),Visual(模板/ html等)

答案 1 :(得分:2)

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

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

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

  • V涵盖了表示逻辑。在设计精良的Flask应用程序中,这是使用模板处理的,所以我想说的是MVC模板== V。

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