个人对于MVP思路的理解,就是开发过程中,数据和界面之间的交互,使用Presenter层管理,较于MVC模式:获取数据,构建对象,在控制器里赋值更新界面;MVP模式思路在获取数据,构造对象后,不直接在控制器中做界面交互逻辑,而是使用控制器层管理,将业务逻辑独立出来,这样便于代码的后期维护,同时降低了控制器的负担以及数据模型和控制器、界面之间的耦合性。
本篇文章以登录界面为例,使用ios的OC语言展示我对于MVP的理解:
登录界面:
首先创建一个空的项目,名为MVPDemoOC,
建立一个名为Classes的文件夹,代码将在该文件夹中:
文件夹UI放置控制器,Biz放置业务逻辑,Model放置数据模型,Presenter放置控制器相应的管理者,View放置管理者和控制器的交互层(注意:文件夹View区别于UIView,文章中实例并未用到UIView文件夹,但在实际开发中,例如TableViewController的cell应放置在UIView中)
在Main.stroyboard中搭建界面,并在ViewController中连接,代码:
#import "ViewController.h"
@interface ViewController ()
{
__weak IBOutlet UITextField *userName;
__weak IBOutlet UITextField *passWord;
__weak IBOutlet UIActivityIndicatorView *activityBar;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
activityBar.hidden = true ;
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)loginClick:(UIButton *)sender {
}
- (IBAction)clearClick:(UIButton *)sender {
}
@end
建立登录的数据模型(UserModel):
在UserModel.h中,代码:
#import <Foundation/Foundation.h>
@interface UserModel : NSObject
@property ( nonatomic , copy ) NSString * username;
@property ( nonatomic , copy ) NSString * password;
@end
在UserModel.m中,代码:
#import "UserModel.h"
@implementation UserModel
@end
建立管理者ViewPresenter的类,包含.h和.m文件,继承NSObject
建立管理者和控制器之间的交互View层,名为MainView。分析:由于View层是用于控制器和管理者(ViewPresenter)的交互,对于管理者,对MainView调用的是一个MainView对象;而在控制器中,需要实现MainView的方法,即为协议。所以MainView可以用协议来实现,在代码中,只需创建MainView.h文件即可(文章后面创建协议均为.h文件,不做单独描述)。代码:
@protocol MainView <NSObject>
@end
现在项目目录如图:
至此,进行分析如下: