iOS MVP架構優化

2021-09-26 01:43:46 字數 3016 閱讀 2647

mvp:面向協議式程式設計 ,model<—>ui 解耦+關聯

v層ui改變,通知p層,p層更新資料通知m層,m層拿到新資料通知p層,p層通知v層ui改變。

mvp 優缺點:

①模型與檢視完全分離,我們可以修改檢視而不影響模型;

②可以更高效的使用模型,因為所有的互動都發生在乙個地方,presenter內部;

③我們可以將乙個presenter用於多個檢視,而不需要改變presenter的邏輯。這個特性非常的有用,因為檢視的變化總是比模型的變化頻繁;

④如果我們把邏輯放在presenter中,那麼我們就可以脫離使用者介面來測試這些邏輯(單元測試);

1.present層**

#import

#import

"model.h

"@protocol presentdelegate @optional

//需求驅動**

- (void)addbtnwithnum:(nsstring*)num indexpath:(nsindexpath*)indexpath;

//通知

- (void

)reloadui;

@end

@inte***ce present : nsobject@property (nonatomic, strong) nsmutablearray *dataarray ;

@property (nonatomic, weak)

iddelegate

;@end

#import

"present.h

"#import

#import

"model.h

"@implementation

present

-(instancetype)init

return

self;

}- (void

)loaddata ,

@,@,

@];for (int i = 0; i)

}-(void)addbtnwithnum:(nsstring *)num indexpath:(nsindexpath *)indexpath ,

@,@,

@];for (int i = 0; i)

if (self.delegate && [self.delegate

respondstoselector:@selector(reloadui)])

}}@end

2.cell層

#import

"mvctableviewcell.h

"@implementation

mvctableviewcell

- (void

)awakefromnib

-(void)didclicksubbtn:(uibutton*)sender

self.num --;

}-(void)didclickaddbtn:(uibutton*)sender

self.num ++;

}-(void)setmodel:(model *)model

- (void)setnum:(int

)num

}- (void

)setselected:(bool)selected animated:(bool)animated

@end

使用

#import

"viewcontroller.h

"#import

"hkdatasource.h

"#import

"mvctableviewcell.h

"#import

"present.h

"#import

"model.h

"static nsstring * reuseid = @"

reuseid";

@inte***ce viewcontroller ()@property (nonatomic, strong) uitableview *tableview;

@property (nonatomic, strong) nsmutablearray *dataarray ;

@property (nonatomic, strong) hkdatasource *datasource ;

@property (nonatomic, strong) present *pt ;

@end

@implementation

viewcontroller

//v層ui改變,通知p層,p層更新資料通知m層,m層拿到新資料通知p層,p層通知v層ui改變。

//mvp 優缺點:

//①模型與檢視完全分離,我們可以修改檢視而不影響模型

//②可以更高效的使用模型,因為所有的互動都發生在乙個地方,presenter內部

//③我們可以將乙個presenter用於多個檢視,而不需要改變presenter的邏輯。這個特性非常的有用,因為檢視的變化總是比模型的變化頻繁。

//④如果我們把邏輯放在presenter中,那麼我們就可以脫離使用者介面來測試這些邏輯(單元測試).

- (void

)viewdidload ];

self.pt =[[present alloc] init];

[self.datasource adddataarray:self.pt.dataarray];

self.view.backgroundcolor =[uicolor whitecolor];

[self.view addsubview:self.tableview];

self.tableview.datasource =self.datasource;

self.pt.

delegate =self;

}- (void

)reloadui

-(uitableview *)tableview

return

_tableview;

}@end

iOS MVC架構優化

mvc 架構問題 使用者 業務邏輯,ui 內部方法,封裝導致 vc 過於繁重 封裝 耦合性過高 解耦 1.tableview優化之封裝 初始化方法和 方法封裝 hkdatasource.h import import typedef void cellconfigure id cell id mod...

solr 搜尋架構優化

將現在架構大小索引方式,乙個大索引有幾千萬資料 小索引幾萬資料,還有另乙個結點有三百萬左右資料,現在每天有900萬左右的請求量,已經可以達到90 以上在100ms以下響應。但還是有少許的搜尋可能達到了兩秒以上,還有乙個就是現在索引是放在共享記憶體裡,如果那天這兩台神機沒有了話就比較麻煩,這次的公升級...

業務架構優化之路

im系統,例如qq或者微博,每個人都讀自己的資料 好友列表 群列表 個人資訊 微博系統,每個人讀你關注的人的資料,乙個人讀多個人的資料。秒殺系統,庫存只有乙份,所有人會在集中的時間讀和寫這些資料,多個人讀乙個資料。例如小公尺手機每週二的秒殺,可能手機只有1萬部,但瞬時進入的流量可能是幾百幾千萬。又例...