MVC对MVC对MVC

2017-03-03  本文已影响23人  anjohnlv

MVC的主要目的即是将数据、逻辑、界面分离,从而使产品的结构更清晰。那么,应该如何分离才是最好最高效的呢?

第一种

view监听自己的事件,并回调controller,controller处理事件,并控制view显示。

第二种

view控制自己的显示,只通知controller处理数据

第三种

view将控件暴露给controller,由controller来监听view的事件,处理并控制view的显示

第一种

view与model,与controller分离。(不完全,view会耦合自身的事件逻辑,下同)

第二种

view与controller分离,但会与model耦合。

第三种

view严格与model,与controller分离。

举例:controller控制一个view,view上有一个button,点击button,会弹出一个tableView,tableView数据异步获取,将选择tableViewItem传给controller处理。

第一种

view监听button点击事件,并将事件回调给controller,controller从model取到数据,控制view显示tableView并显示数据,tableView监听自己的选择事件,并将选择item回调给controller,完成目标。其中controller同时需要监听view和tableView,view需要提供显示tableView和tableView加载数据的接口。

第二种

view监听button点击事件,从model取出数据并显示tableView。同时监听tableView的选择事件,并将选择item回调给controller,完成目标。其中controller需要监听view,view需要监听tableView。

第三种

controller监听button点击事件,从model取到数据并显示tableView。同时监听tableView的选择事件,完成目标。其中controller需要监听button和tableView。

代码结构:

第一种

view负责界面的初始化,包括view,button,tableView;负责控件的监听,包括button点击,tableView选择。

controller负责逻辑的控制,tableView显示;负责view的监听,包括view回调需要显示tableView,view回调最终选择项。

model负责数据的获取,tableView数据。

第二种

view负责界面的初始化,包括view,button,tableView;负责控件的监听,包括button点击,tableView选择。负责控件的逻辑,tableView显示。

controller负责view的监听,监听最终结果。

model负责数据的获取,tableView数据。

第三种

view负责界面的初始化,包括view,button,tableView;

controller负责负责控件的监听,包括button点击,tableView选择;负责控件的逻辑,tableView显示。

model负责数据的获取,tableView数据。

第一种

view负责初始化和事件监听,controller负责管理和控制view。

第二种

view负责主要代码,controller只监听最终结果。

第三种

view只负责初始化,controller负责主要代码。

个人感觉,第三种是最标准的分离方式,但是大量的逻辑代码堆积在了controller里,使mvc变成了Massive View Controller;第二种是最方便的分离方式,但是view直接从model取数据,并不符合mvc的要求;第一种比较折中。

那么哪一种才是最好最高效的呢?

上一篇下一篇

猜你喜欢

热点阅读