下载此文档

猿题库IOS客户端架构设计.pdf


文档分类:IT计算机 | 页数:约35页 举报非法文档有奖
1/35
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/35 下载此文档
文档列表 文档介绍
该【猿题库IOS客户端架构设计 】是由【住儿】上传分享,文档一共【35】页,该文档可以免费在线阅读,需要了解更多关于【猿题库IOS客户端架构设计 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
ሧ᷌ପiOSਮಁᒒຝ຅ᦡᦇ
ӞᐿचԭMVC޾MVVMදᬰጱຝ຅
᠗ล᰷iOSࢫᴚᨮᨱՈ:.
Model-View-Controller:.
MVCսᅩ
ฃ਍ԟ
ฃ୏ݎ
᭗አ౮ᆧ:.
MVCᗌᅩ
MassiveViewController:.
Model-View-ViewModel:.
owns
owns
ModelViewControllerView
updates
updates:.
owns
ModelViewControllerView
updates:.
ownsowns
ModelViewModelViewControllerView
updatesupdates:.
MVVMսᅩ
ٺ᫷ԧVCጱᨮ೅
ๅݢၥᦶ
୩य़ጱᕬਧ๢ګ:.
MVVMᗌᅩ
ຄṛጱ਍ԟ౮๜޾୏ݎ౮๜
හഝᕬਧֵ஑Bugๅᵙ᧣ᭇ
ViewModelጱᘳᨱՖᆐஉ᯿:.
ࣁӷᐿຝ຅Ӿ๦ᤍᘒԾኞጱຝ຅:.
MVVMwithoutBINDING
withDATACONTROLLER:.
ModelViewControllerView:.
ViewControllerView:.
ᤰᯈ
ྯӞӻV᮷ํӞӻ੒ଫጱVM҅V
ViewControllerViewModel
ጱහഝ઀ᐏ޾໏ୗ᮷ኧٌਧګ
ӧ୚ګ๢੊ᥡ౲ګ๢ਧᕬݻ݌ف҅
ਧګ
ᘒฎ᭗ᬦփᕹጱդቘࢧ᧣౲᭗Ꭳ
UIԪկ
ਖ਼UIԪկփᕳक़ኴ
View
VCݝᨮᨱਖ਼VMᤰᯈᕳV҅ളݑUI
Ԫկ:.
অ॒

Viewݢզਠقᥴᘠ҅ݝᵱᥝᏟਧঅViewModel޾ࢧ᧣ളݗܨݢ

ViewController੶ݢզੱݢᚆ੝ጱ޾Viewጱٍ֛ᤒሿ಑Ի᭲҅
ਖ਼ᬯ᮱ړᘳᨱ᫨ᕳԧViewModel҅ٺ᫷ԧViewControllerጱᨮ೅

ֵአփᕹጱࢧ᧣๢ګ҅਍ԟ౮๜֗҅හഝ޾Ԫկၞف޾ၞڊฃ
ᥡ੊޾ݢഴ҅ᴳ֗ᖌಷ޾᧣ᦶ౮๜:.
ModelViewControllerViewModel
View:.
ਖ਼॒ቘහഝ޾឴ݐහഝጱᘳ
ᨱ՗փᕹMVVMጱVMӾು
ᐶڊ๶҅౮ԅDC
᧗࿢/Ԫկ
DataControllerViewController
VC᧗࿢හഝ޾ਖ਼ӞԶහഝ
ےૡݸጱහഝץදጱԪկҁݢզฎUIԪկ
᥶ݎ҂փ᭓ᕳDC
ᗑᕶ/හഝପ
DCളතکVCጱ᧗࿢ݸ҅
ݐ឴Mݻහഝ޾ๅෛහഝ҅
ଚਖ਼ےૡݸጱහഝᬬࢧ
Model
DCᬮᨮᨱᗑᕶ੶޾೮ԋ੶
ጱ᭦ᬋ:.
অ॒

᭿عԧփᕹMVVMຝ຅VM੶ํݢᚆݒ஑ᛎᙠጱఘ٭҅ๅႴศጱཛྷࣘ
ᘳᨱ
•ӱۓ᭦ᬋᥴᘠ҅හഝጱےૡ޾॒ቘ᮷නࣁDataControllerӾ҅View
Controllerӧٚىஞහഝই֜឴஑҅ই॒֜ቘ҅DataControllerӧٚᵱ
ᥝىஞኴᶎই֜઀ᐏ҅ই֜Ի԰
•DataControllerኧԭኴᶎ෫ى҅ಅզݢզํๅঅጱݢၥᦶ௔޾ݢ॔አ௔:.
᧗࿢/Ԫկ
ᤰᯈ
DataControllerViewControllerViewModel
ےૡݸጱහഝ
ᗑᕶ/හഝପਧګ
UIԪկ
ModelView:.
“TalkisCheap,ShowmetheCode.”
–LinusTorvalds:.
ெԍ؉Ҙ
ሧ᷌ପጱԆᶭᶎ:.
ViewController
•ྯӞӻViewControllerտํӞӻ੒ଫጱDataController
•಩ኴᶎೆړ౮پӻܔᇿጱViewғBannerView҅ActivityView҅SubjectView
***@interfaceAPEHomePracticeViewController()<APEHomePracticeSubjectsViewDelegate,
APEBannerCycleImageViewDelegate,APECoverAdViewDelegate,APEHomePracticeActivityViewDelegate>
***@property(nonatomic,strong,nullable)UIScrollView*contentView;
***@property(nonatomic,strong,nullable)APEHomePracticeBannerView*bannerView;
***@property(nonatomic,strong,nullable)APEHomePracticeActivityView*activityView;
***@property(nonatomic,strong,nullable)APEHomePracticeSubjectsView*subjectsView;
***@property(nonatomic,strong,nullable)APEHomePracticeDataController*dataController;
***@end:.
ViewController
•ࣁviewDidLoadጱ෸ײ҅ڡত۸ݱӻView҅ଚᦡᗝঅ૲ੴ
-(void)setupContentView{
=[[UIScrollViewalloc]init];
[:];
=[[APEHomePracticeBannerViewalloc]init];
=self;
=[[APEHomePracticeActivityViewalloc]init];
=self;
=[[APEHomePracticeSubjectsViewalloc]init];
=self;
[:];
[:];
[:];
//LayoutViews
...
}:.
զSubjectViewԅֺ
•ݻDataController᧗࿢Subjectsጱහഝ
•᧗࿢ਠ౮ݸ҅አ឴஑ጱහഝኞ౮ViewModel҅ଚਖ਼ٌᤰᯈᕳSubjectView
-(void)fetchSubjectData{
[:^(NSError*error){
if(error==nil){
[selfrenderSubjectView];
}
}];
}
-(void)renderSubjectView{
APEHomePracticeSubjectsViewModel*viewModel=
[APEHomePracticeSubjectsViewModelviewModelWithSubjects:];
[:viewModel];
}:.
Subjectፘىහഝᕮ຅
•APESubjectғ਍ᑀ҅۱ތid޾nameᒵં௔
•APEUserSubjectғአಁ਍ᑀמ௳҅۱ތአಁฎވ୏ސ຤ӻ਍ᑀᒵં௔
***@interfaceAPESubject:MTLModel<MTLJSONSerializing>
***@property(nonatomic,strong,nullable)NSNumber*id;
***@property(nonatomic,strong,nullable)NSString*name;
***@end
***@interfaceAPEUserSubject:MTLModel<MTLJSONSerializing>
***@property(nonatomic,strong,nullable)NSNumber*id;
***@property(nonatomic,strong,nullable)NSNumber*updatedTime;
///OnorOff
***@property(nonatomic)APEUserSubjectStatusstatus;
***@end:.
DataController
•ྯӞӻViewControllerํӞӻ੒ଫጱDataController҅۱ތԧᬯӻᶭᶎӤಅํහ
ഝፘى᭦ᬋ҅౯ժᑍٌԅViewRelatedDataController
•ԅԧดᐏSubjectViewᵱᥝӞӻአಁ୏ސጱᑀፓڜᤒ҅ਧԎԅopenSubjects
•ਧԎӞӻളݗ᧗࿢ᬯӻහഝ
***@interfaceAPEHomePracticeDataController:APEBaseDataController
///Subjectsthatareopenwithcurrentphase.
***@property(nonatomic,strong,nonnull,readonly)NSArray<APESubject*>*openSubjects;
///Requestsubjectdataandcallcallbackwhenfinished.
///
///***@paramcallbackCompletioncallbackblock.
-(void)requestSubjectDataWithCallback:(nonnullAPECompletionCallback)callback;
***@end:.
•DataControllerݢզ॔አๅੜጱDataController҅᭗ଉݝ۱ތᕍᔙጱModelፘى᭦ᬋֺ҅
ইᗑᕶ᧗࿢҅හഝପ᧗࿢҅౲ฎच๜ጱහഝےૡ̶౯ժᑍٌԅModelRelatedData
Controller
•ᬯᔄDataControllerᕪଉ൉׀ྋԻጱහഝ̶ֺইSubjectDataController҅൉׀ԧಅํጱ
allSubjectsҁAPESubjectᔄ҂޾አಁ୏ސጱuserSubjectsҁAPEUserSubjectᔄ҂̶ਖ਼ᬯԶྋ
Իහഝےૡ౮ኴᶎ๋ᕣᵱᥝጱහഝopenSubjectsҁAPESubjectᔄ҂
***@interfaceAPEHomePracticeDataController()
***@property(nonatomic,strong,nonnull)APESubjectDataController*subjectDataController;
***@end
***@implementationAPEHomePracticeDataController
-(void)requestSubjectDataWithCallback:(nonnullAPECompletionCallback)callback{
APEDataCallbackdataCallback=^(NSError*error,iddata){
callback(error);
};
[:dataCallback];
[:dataCallback];
}
***@end
-(nonnullNSArray<APESubject*>*)openSubjects{
?:@[];
}:.
ViewModel
•ྯӻView᮷տํӞӻ੒ଫጱViewModel
•ViewModel۱ތԧ઀ᐏᬯӻViewಅᵱᥝጱಅํහഝ
•አૡܯොဩ๶ىᥝᵱٚӧဩොӻᬯ҅ledoMViewୌڠஞփ᭓ጱฎಅํጱ
Subjectsᬮฎአಁ୏ސጱSubjects
***@interfaceAPEHomePracticeSubjectsViewModel:NSObject
***@property(nonatomic,strong,nonnull)NSArray<APEHomePracticeSubjectsCollectionCellViewModel*>
*cellViewModels;
***@property(nonatomic,strong,nonnull)UIColor*backgroundColor;
+(nonnullAPEHomePracticeSubjectsViewModel*)viewModelWithSubjects:(nonnullNSArray<APESubject*>
*)subjects;
***@end:.
ViewModel
•ViewModelݢզ۱ތৼViewModel҅੪؟ViewݢզํSubview
•SubjectViewٖ᮱ኧUICollectionViewਫሿ҅ਖ਼CellԞ੒ଫጱᦡᦇӞӻView
Model
***@interfaceAPEHomePracticeSubjectsCollectionCellViewModel:NSObject
***@property(nonatomic,strong,nonnull)UIImage*image;
***@property(nonatomic,strong,nonnull)UIImage*highlightedImage;
***@property(nonatomic,strong,nonnull)NSString*title;
***@property(nonatomic,strong,nonnull)UIColor*titleColor;
***@property(nonatomic,strong,nonnull)UIColor*backgroundColor;
+(nonnullAPEHomePracticeSubjectsCollectionCellViewModel*)viewModelWithSubject:(nonnull
APESubject*)subject;
+(nonnullAPEHomePracticeSubjectsCollectionCellViewModel*)viewModelForMore;
***@end:.
View
•ਧԎঅᤰᯈViewModelጱളݗ
•ਧԎঅUIࢧ᧣Ԫկ
***@protocolAPEHomePracticeSubjectsViewDelegate<NSObject>
-(void)homePracticeSubjectsView:(nonnullAPEHomePracticeSubjectsView*)subjectView
didPressItemAtIndex:(NSInteger)index;
***@end
***@interfaceAPEHomePracticeSubjectsView:UIView
***@property(nonatomic,strong,nullable,readonly)APEHomePracticeSubjectsViewModel*viewModel;
***@property(nonatomic,weak,nullable)id<APEHomePracticeSubjectsViewDelegate>delegate;
-(void)bindDataWithViewModel:(nonnullAPEHomePracticeSubjectsViewModel*)viewModel;
***@end:.
View
•ֵአViewModelጱහഝ๶჉ວኴᶎ
•SubviewԞݢզֵአViewModel
-(void)bindDataWithViewModel:(nonnullAPEHomePracticeSubjectsViewModel*)viewModel{
=viewModel;
=;
[];
[selfsetNeedsUpdateConstraints];
}
-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionViewcellForItemAtIndexPath:
(NSIndexPath*)indexPath{
APEHomePracticeSubjectsCollectionViewCell*cell=[collectionView
dequeueReusableCellWithReuseIdentifier:@"Cell"forIndexPath:indexPath];
if(0<=&&<){
APEHomePracticeSubjectsCollectionCellViewModel*vm=
[];
[cellbindDataWithViewModel:vm];
}
returncell;
}:.
ViewController
***@interfaceAPEHomePracticeViewController()<APEHomePracticeSubjectsViewDelegate,
APEBannerCycleImageViewDelegate,APECoverAdViewDelegate,APEHomePracticeActivityViewDelegate>
***@property(nonatomic,strong,nullable)UIScrollView*contentView;
***@property(nonatomic,strong,nullable)APEHomePracticeBannerView*bannerView;
***@property(nonatomic,strong,nullable)APEHomePracticeActivityView*activityView;
***@property(nonatomic,strong,nullable)APEHomePracticeSubjectsView*subjectsView;
***@property(nonatomic,strong,nullable)APEHomePracticeDataController*dataController;
***@end
-(void)fetchSubjectData{
[:^(NSError*error){
if(error==nil){
[selfrenderSubjectView];
}
}];
}
-(void)renderSubjectView{
APEHomePracticeSubjectsViewModel*viewModel=
[APEHomePracticeSubjectsViewModelviewModelWithSubjects:];
[:viewModel];
}:.
௛ᕮ
੶ེႴศ҅ᘳᨱกᏟ҅ᘠݳଶ֗҅॔አ௔ṛ҅ၥᦶ௔ṛ
֗਍ԟ౮๜҅֗୏ݎ౮๜
ṛਫෞ௔҅෫ᵱෆ֛᯿຅:.
Q&A
THANKS
ࢵݪلᙙරᕚࣁጱ؀հํ๋ٖሧ᷌ପᬮࣁ೮ᖅ೗ՈӾ
Webڹᒒ̵๐ۓ࢏ᒒ̵iOS̵Android̵Windows̵ᓒဩᎸᑪ̵ᶪᥤ̵᷇ᬩᖌᒵ
᠗ล᰷

猿题库IOS客户端架构设计 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数35
  • 收藏数0 收藏
  • 顶次数0
  • 上传人住儿
  • 文件大小466 KB
  • 时间2023-02-22