iOS-基于面向協(xié)議MVP模式下的軟件設(shè)計(jì)--架構(gòu)設(shè)計(jì)

用慣了MVC模式,是不是覺(jué)得ViewContro'l'le'r層的東西太多了咖刃,太亂了,隨隨便便就幾百行代碼,現(xiàn)在給大家?guī)?lái)一個(gè)在Android軟件開發(fā)中最常使用的MVP面向協(xié)議編程模式,我也是覺(jué)得這種模式好用,才將這種思想轉(zhuǎn)移過(guò)來(lái)的,設(shè)計(jì)模式不是指單純的應(yīng)用在某一種語(yǔ)言當(dāng)中,他可以試用任何一種開發(fā)語(yǔ)言,所以好用的東西就要分享給大家,為了便于大家理解,Demo只是最基本的完成了MVP的架構(gòu)模式,感興趣的可以下來(lái)看一看幅慌。

MVP 模式

Model-View-Presenter(MVP)是(MVC)體系結(jié)構(gòu)模式的一種變體,并主要用于構(gòu)建用戶界面典蝌。在iOS,這個(gè)模式是使用一個(gè)協(xié)議實(shí)現(xiàn)的,協(xié)議定義了接口實(shí)現(xiàn)的委托粱快。

Presenter

在MVP模式中,協(xié)議是假定中間人的功能,所有表示邏輯被推到中間人中恬砂。

Controller v/s Presenter

  • V層

UIView和UIViewController以及子類

  • P層

中介(關(guān)聯(lián)M和V)

  • M層

數(shù)據(jù)層(數(shù)據(jù):數(shù)據(jù)庫(kù),網(wǎng)絡(luò),文件等等)

mvp.png
mvp-delegate.png

第一步:實(shí)現(xiàn)M層

#import "LoginModel.h"
//M層
@implementation LoginModel
- (void)loginWithName:(NSString*)name pwd:(NSString*)pwd callback:(Callback)callback{
    //實(shí)現(xiàn)功能
    //例如:訪問(wèn)網(wǎng)絡(luò)?訪問(wèn)數(shù)據(jù)庫(kù)?
    //數(shù)據(jù)曾劃分了模塊()
    [HttpUtils postWithName:name pwd:pwd callback:^(NSString *result) {
        //解析json ,xml數(shù)據(jù)
        //然后保存數(shù)據(jù)庫(kù)
        //中間省略100行代碼
        callback(result);//返回?cái)?shù)據(jù)回調(diào)
    }];
}

@end

第二步:實(shí)現(xiàn)V層

#import <Foundation/Foundation.h>
//V層
@protocol LoginView <NSObject>

- (void)onLoginResult:(NSString*)result;

@end

第三步:實(shí)現(xiàn)P層

// P層
#import <Foundation/Foundation.h>
#import "LoginView.h"
#import "LoginModel.h"
//中介(用于關(guān)聯(lián)M層和V層)
@interface LoginPresenter : NSObject
//提供一個(gè)業(yè)務(wù)方法
- (void)loginWithName:(NSString*)name pwd:(NSString*)pwd;
- (void)attachView:(id<LoginView>)loginView;
- (void)detachView;
@end
#import "LoginPresenter.h"

//P是中介(職責(zé)是用于關(guān)聯(lián)M和V)
//P層需要:持有M層的引用和V層的引用(OOP)思想
@interface LoginPresenter ()
@property (nonatomic,strong) LoginModel *loginModel;
@property (nonatomic,strong) id<LoginView> loginView;
@end


@implementation LoginPresenter
- (instancetype)init{
    self = [super init];
    if (self) {
        //持有M層的引用
        _loginModel = [[LoginModel alloc]init];
    }
    return self;
}
//提供綁定V層方法
//綁定
- (void)attachView:(id<LoginView>)loginView{
    _loginView = loginView;
}
//解除綁定
- (void)detachView{
    _loginView = nil;
}
//實(shí)現(xiàn)業(yè)務(wù)方法
- (void)loginWithName:(NSString*)name pwd:(NSString*)pwd{
    [_loginModel loginWithName:name pwd:pwd callback:^(NSString *result) {
        if (_loginView != nil) {
            [_loginView onLoginResult:result];
        }
    }];
    
}

@end

第四步:在VIewController中使用

#import "ViewController.h"
#import "LoginView.h"
#import "LoginPresenter.h"
@interface ViewController ()<LoginView>
@property (nonatomic,strong) LoginPresenter* presenter;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _presenter = [[LoginPresenter alloc ]init];
    [_presenter attachView:self];
    //程序一旦運(yùn)行立馬執(zhí)行請(qǐng)求(測(cè)試)(按鈕或者事件)
    [_presenter loginWithName:@"188*****8*8" pwd:@"123456"];
}

- (void)onLoginResult:(NSString *)result{
    
    NSLog(@"返回結(jié)果%@",result);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    [_presenter detachView];
}
@end

這樣一個(gè)簡(jiǎn)單的MVP模式的邏輯就完成了,這里有寶藏Demo,如果覺(jué)得有幫助,不要忘記點(diǎn)個(gè)star哦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末篡殷,一起剝皮案震驚了整個(gè)濱河市瞬内,隨后出現(xiàn)的幾起案子卓箫,更是在濱河造成了極大的恐慌载矿,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異闷盔,居然都是意外死亡弯洗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門逢勾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)牡整,“玉大人,你說(shuō)我怎么就攤上這事溺拱√颖矗” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵迫摔,是天一觀的道長(zhǎng)沐扳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)句占,這世上最難降的妖魔是什么沪摄? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮纱烘,結(jié)果婚禮上卓起,老公的妹妹穿的比我還像新娘。我一直安慰自己凹炸,他們只是感情好戏阅,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啤它,像睡著了一般奕筐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上变骡,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天离赫,我揣著相機(jī)與錄音,去河邊找鬼塌碌。 笑死渊胸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的台妆。 我是一名探鬼主播翎猛,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼接剩!你這毒婦竟也來(lái)了切厘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤懊缺,失蹤者是張志新(化名)和其女友劉穎疫稿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遗座,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年舀凛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片途蒋。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腾降,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碎绎,到底是詐尸還是另有隱情,我是刑警寧澤抗果,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布筋帖,位于F島的核電站,受9級(jí)特大地震影響冤馏,放射性物質(zhì)發(fā)生泄漏日麸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一逮光、第九天 我趴在偏房一處隱蔽的房頂上張望代箭。 院中可真熱鬧,春花似錦涕刚、人聲如沸嗡综。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)极景。三九已至,卻和暖如春驾茴,著一層夾襖步出監(jiān)牢的瞬間盼樟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工锈至, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晨缴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓峡捡,卻偏偏與公主長(zhǎng)得像击碗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子们拙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 基于面向協(xié)議MVP模式下的軟件設(shè)計(jì)-(iOS篇) 傳統(tǒng)模式下的開發(fā)MVCMVVM基于面向協(xié)議MVP的介紹MVP實(shí)戰(zhàn)...
    風(fēng)之痕_閱讀 16,321評(píng)論 29 119
  • 前言 看了下上篇博客的發(fā)表時(shí)間到這篇博客殊者,竟然過(guò)了11個(gè)月与境,罪過(guò),罪過(guò)猖吴。這一年時(shí)間也是夠折騰的摔刁,年初離職跳槽到鵝廠...
    西木柚子閱讀 21,251評(píng)論 12 184
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,326評(píng)論 25 707
  • 縹虛難辨夢(mèng)蝴蝶 亦真亦幻人世間 《西游補(bǔ)》是我至今都引以為奇的作品,其燒腦程度堪比《前目的地》海蔽、《彗星來(lái)的那一夜》...
    張德賢閱讀 348評(píng)論 0 0
  • 目標(biāo):百分之九十以上的分?jǐn)?shù) 有時(shí)候共屈,我也開始存疑,但一想到成本意識(shí)党窜,就要去賺回來(lái)拗引,至少對(duì)得起 中心詞:每日人生 環(huán)...
    良辰美LiangChen閱讀 145評(píng)論 0 0