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的要求;第一种比较折中。
那么哪一种才是最好最高效的呢?