MVC - 模型视图控制器

时间:2017-03-03 14:32:56

标签: oop model-view-controller architecture mvp

我正在准备关于MVC的讲座,我发现没有一个MVC,但我发现其中至少有3个(+平台/工具变体)。我希望通过阅读不同的来源对我创建的整体图片进行评论。 (名称"经典","事件"和"新"是我的,为了在讨论中区分它们而创建)

经典MVC

我发现,第一个MVS是由Trygve Reenskaug于1979年在Xerox的Smalltalk工作发明的。它是专为静态网站设计的,而View完全是无状态的。

加载页面已定向到Controller,它正在使用Model获取数据并创建View以进行响应。 View然后只是从数据创建一个网站。

还将数据更改为使用模型应用更改的Controller。然后它发回信息以刷新页面。

示例:

class Controller {
    val model = Model()
    fun getWebside(req: Req, res: Res) {
        val data = model.getData()
        val view = View()
        view.respond(res)
    }
    fun updateData(req: Req, res: Res) {
        val changed = model.getData(gataFrom(req))
        if(changed) askToRefresh(res) else res.ok()
    }
}

事件MVC

经常提到的另一种类型的MVC(在我看来)与早期窗口开发相关联。这里View和Controller保持彼此的引用。哪一个是创建哪一个是框架问题。一开始,View正在向Controller询问数据(有时甚至View都在询问Model的数据,但我确信它不是纯粹的)。通常输入也会定向到View,但它总是传递给Controller。当有请求更改数据时,Controller正在使用Model来执行此操作,模型在完成时发送事件。这些事件正在通知View。使用它们View正在自行更新。

Example diagram of Event MVC

新MVC

最新的,现在最受欢迎的MVC与MVP几乎相同,但Controller和View并不落后于接口。 View仅与控制器联系!没有从模型到视图的事件。控制器可以访问它们,然后更改View。

New MVC

我说错了吗?也许错了?我会喜欢所有的评论和意见。

0 个答案:

没有答案