iOS架構(gòu)文檔

引言##

  • APP采用object-c純代碼開(kāi)發(fā),末使用故事面板(storyboard),個(gè)別view采用xib(自定義cell可以是xib)。原因是:<a >傳送門(mén)</a>。
  • 布局我們采用Masonry布局。Masonry是一個(gè)輕量級(jí)的布局框架 擁有自己的描述語(yǔ)法 采用更優(yōu)雅的鏈?zhǔn)秸Z(yǔ)法封裝自動(dòng)布局 簡(jiǎn)潔明了 并具有高可讀性 。非常簡(jiǎn)單的使用純代碼實(shí)現(xiàn)autoLayout布局,是目前非常流行的手工布局框架。<a >傳送門(mén)</a>。
  • 使用MVVM的設(shè)計(jì)模式,顯示層更加細(xì)節(jié)化、可定制化,數(shù)據(jù)管理清晰化,業(yè)務(wù)和數(shù)據(jù)層松解耦。
  • 使用AFNetworking為網(wǎng)絡(luò)請(qǐng)求引擎,目前被95%以上的app所采用。<a >傳送門(mén)</a>。
  • 使用cocoapods進(jìn)行庫(kù)的統(tǒng)一管理,使用方便,清晰明了。<a >傳送門(mén)</a>
  • 使用JSPath作為熱補(bǔ)丁技術(shù)。不用等待審核,動(dòng)態(tài)修改程序。根據(jù)業(yè)務(wù)需要?jiǎng)討B(tài)增加或者更改需求。動(dòng)態(tài)修改程序bug。<a >傳送門(mén)</a>

項(xiàng)目版本管理##

使用git管理代碼,團(tuán)隊(duì)開(kāi)發(fā),目前放到coding網(wǎng)站上

開(kāi)發(fā)環(huán)境##

操作系統(tǒng):mac os
開(kāi)發(fā)軟件:Xcode7.3

安全策略##

在涉及個(gè)人帳戶信息有關(guān)網(wǎng)絡(luò)請(qǐng)求,采用https方式,通過(guò)非對(duì)稱密鑰對(duì)請(qǐng)求串加解密,加密方式(MD5、RSA)。

第三方庫(kù)導(dǎo)入方式##

cocoapods統(tǒng)一管理

F27B85ED-F0EB-43DC-97C7-E480DB3A8A91.png

框架目錄結(jié)構(gòu)##

F1BD6630-E349-4BA4-BCF0-811E93B77D5F.png

工具箱(YNCUtils)##

6D73F628-9399-4A07-8E40-EE5574DC8A8B.png

工具箱:開(kāi)發(fā)中用到的常用工具,讓開(kāi)發(fā)者的開(kāi)發(fā)更加簡(jiǎn)易(結(jié)合BFKit使用)
工具箱包含內(nèi)容:

  • YNCMacro:宏定義字段和方法、公用枚舉
  • YNCTool(工具類):loading框、瀏覽器、輪播圖、掃碼、自定義視圖控件、常用方法工具類、定位、獲取相冊(cè)圖片及拍照?qǐng)D片、彈出菜單、第三方分享二次封裝
  • YNCFoundation:Foundation類別
  • YNCUIKit:YNCUIKit類別

基類(YNCBase)##


基類繼承關(guān)系圖#####
0D664D65-95FA-483A-BDAA-20265DCAFC9B.png
項(xiàng)目基類列表#####
  • ViewControllers
    • BaseViewController:所有控制器基類
    • BaseTabBarController:分欄控制器基類
    • ListViewController:下拉刷新,上拉加載基類
    • BasePageViewController:滑動(dòng)選項(xiàng)卡基類
    • SDCNavViewController:導(dǎo)航控制器基類
    • SearchViewController:搜索基類
  • ViewModels:
    • BaseViewModel:所有viewmodel的基類
  • Views:
    • BaseView:所有view的基類
    • MJSweetCornHeader:下拉刷新玉米動(dòng)畫(huà)
    • TZCustomCell:自定義輸入框顯示框cell
項(xiàng)目基類開(kāi)放的屬性和方法#####

  • BaseViewController
    -屬性:
    -控制器推出類型
    -自定義導(dǎo)航條
    -導(dǎo)航條左側(cè)按鈕
    -導(dǎo)航條右側(cè)按鈕
    -導(dǎo)航條左側(cè)按鈕樣式
    -方法:
    -顯示重新加載視圖
    -隱藏重新加載視圖
    -沒(méi)有網(wǎng)時(shí),點(diǎn)擊重新加載按鈕(重新方法)
    -有網(wǎng)時(shí)的處理(重新方法)
    -無(wú)網(wǎng)絡(luò)時(shí)的處理(重新方法)
    -創(chuàng)建沒(méi)有數(shù)據(jù)時(shí)的視圖
    -隱藏沒(méi)有數(shù)據(jù)時(shí)的視圖
    -設(shè)置導(dǎo)航條背景顏色
    -設(shè)置導(dǎo)航標(biāo)題
    -導(dǎo)航條左側(cè)按鈕點(diǎn)擊事件(重寫(xiě)方法)
    -導(dǎo)航條右側(cè)按鈕點(diǎn)擊事件(重寫(xiě)方法)
    -推出模態(tài)視圖
    -返回模態(tài)視圖
    -推出導(dǎo)航視圖
    -返回導(dǎo)航視圖
    -返回到導(dǎo)航根視圖

  • ListViewController
    -屬性:
    -tableView
    -數(shù)據(jù)源
    -當(dāng)前頁(yè)數(shù)
    -刷新類型
    -方法:
    -添加下拉刷新,上拉加載
    -添加上拉加載
    -載入新數(shù)據(jù)(重新方法)
    -載入更多數(shù)據(jù)(重新方法)
    -列表刷新設(shè)置
    -列表刷新設(shè)置

  • BaseTabBarController
    -方法:
    -創(chuàng)建分欄控制器
    -添加自定義中心分欄按鈕

  • BasePageViewController
    -屬性:
    -子控制器數(shù)組
    -子控制器標(biāo)題名
    -方法:
    -設(shè)置布局

  • BaseViewModel:
    -屬性:
    -ReturnValueBlock
    -ErrorCodeBlock
    -FailureBlock
    -方法:
    -傳入交互block塊

網(wǎng)絡(luò)請(qǐng)求(YNCNetwork)##

采用AFNetworking,目前被95%以上的app所采用,并進(jìn)行了二次封裝,加入了緩存策略。采用block進(jìn)行回調(diào),返回成功、請(qǐng)求異常、請(qǐng)求失敗。

開(kāi)放方法結(jié)構(gòu)圖
7D096CCD-6834-4E4D-B4F2-58F36B65075D.png
使用工具
  • AFnetworking網(wǎng)絡(luò)框架
  • SQLite數(shù)據(jù)庫(kù)
  • FMDB數(shù)據(jù)庫(kù)操作工具
使用方法
@weakify(self);
[HttpRequest post:AppURLHomeShoplist params:dict cachePolicy:YNCHttpReturnCacheDataThenLoad ReturnValeuBlock:^(id returnValue) {
    @strongify(self);
    HomePageModel *model = [HomePageModel mj_objectWithKeyValues:returnValue];
    self.returnBlock(model);
} ErrorCodeBlock:^(int errorCode, NSString *errMsg) {
    @strongify(self);
    self.errorBlock(errorCode,errMsg);
} FailureBlock:^(id error) {
    @strongify(self);
    self.failureBlock(error);
}];

項(xiàng)目開(kāi)發(fā)模塊目錄##

A140C002-3D58-4C93-9345-E9C86D458778.png
業(yè)務(wù)模塊開(kāi)發(fā):
  • 首頁(yè)
  • 訂單
  • 云鍵
  • 搜索
  • 個(gè)人中心
  • 購(gòu)物車
  • 商品
  • 支付
非業(yè)務(wù)模塊開(kāi)發(fā):
  • app啟動(dòng):AppDelegate,城市選擇,啟動(dòng)廣告,引導(dǎo)頁(yè),更新
  • 登錄注冊(cè)
  • 根視圖控制器
  • 掃碼

開(kāi)發(fā)模塊設(shè)計(jì)模式###

mvvm框架
  • model:數(shù)據(jù)模型
  • view:視圖顯示
  • viewModel:數(shù)據(jù)處理
  • viewcontroller:視圖控制器
基本流程:

viewModel請(qǐng)求并接收數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行處理,將處理后的模型數(shù)據(jù)傳遞給viewcontroller,viewcontroller拿到數(shù)據(jù)后控制view的顯示。
MVVM的設(shè)計(jì)模式,顯示層更加細(xì)節(jié)化、可定制化,數(shù)據(jù)管理清晰化,業(yè)務(wù)和數(shù)據(jù)層松解耦。

A7407A1C-CB22-4EFC-9059-31493280F3AC.png

界面布局##

使用Masnory工具,對(duì)Autolayerout和Size Classes的布局方式進(jìn)行了封裝,簡(jiǎn)單實(shí)用,節(jié)省了大量代碼。

數(shù)據(jù)存儲(chǔ)方式##

根據(jù)產(chǎn)品需要,數(shù)據(jù)從服務(wù)器下載和本地存儲(chǔ),本地?cái)?shù)據(jù)分緩存和內(nèi)存保留,經(jīng)常讀取的寫(xiě)入緩存,內(nèi)存數(shù)據(jù)按大小,小的寫(xiě)入plist文件,大的寫(xiě)入數(shù)據(jù)庫(kù),用FMDB
地址信息:
plist文件寫(xiě)入。路徑:(沙盒/Library/Caches)
用戶數(shù)據(jù)本地化:
NSUserdefuat 本地存儲(chǔ)。路徑:(沙盒/Library/Preferences)
本地文件路徑使用規(guī)范
1.Documents:
只有用戶生成的文件、其他數(shù)據(jù)及其他程序不能重新創(chuàng)建的文件,應(yīng)該保存在<Application_Home>/Documents 目錄下面,并將通過(guò)iCloud自動(dòng)備份。
2.Library:
可以重新下載或者重新生成的數(shù)據(jù)應(yīng)該保存在 <Application_Home>/Library/Caches 目錄下面。舉個(gè)例子,比如雜志、新聞、地圖應(yīng)用使用的數(shù)據(jù)庫(kù)緩存文件和可下載內(nèi)容應(yīng)該保存到這個(gè)文件夾。
3.tmp:
只是臨時(shí)使用的數(shù)據(jù)應(yīng)該保存到 <Application_Home>/tmp 文件夾。盡管 iCloud 不會(huì)備份這些文件,但在應(yīng)用在使用完這些數(shù)據(jù)之后要注意隨時(shí)刪除,避免占用用戶設(shè)備的空間

事件處理##

有kvo,通知,代理和block(使用理最多)

模型定義##

使用MJExtension對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行model轉(zhuǎn)化,是一套字典和模型之間互相轉(zhuǎn)換的超輕量級(jí)框架,能對(duì)不同數(shù)據(jù)類型和不同數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理。

網(wǎng)絡(luò)圖片加載##

采用SDWebImage庫(kù)進(jìn)行處理,可以對(duì)圖片進(jìn)行異步加載并緩存。

熱補(bǔ)丁##

jspath

支付功能##

對(duì)農(nóng)行,支付寶,微信等支付功能進(jìn)行了封裝

分享功能##

對(duì)shareSDK二次封裝,包含自定義和非自定義兩種樣式。

定位##

高德地圖

代碼規(guī)范##

按照先前小組定制的代碼開(kāi)發(fā)規(guī)范進(jìn)行開(kāi)發(fā),規(guī)范文檔已上傳svn

統(tǒng)計(jì)##

集成了友盟統(tǒng)計(jì)

推送##

采用極光推送

項(xiàng)目打包##

通過(guò)fir快速打包,可提供給測(cè)試下載url.

模塊功能細(xì)分##

D948C780-53B5-4889-B587-013E86546CD8.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容