摘要:請(qǐng)求下來數(shù)據(jù)之后,我們使用了提供的進(jìn)行解析,類化。示例代碼本篇我們將提供以及示例代碼來闡述我們上文中提到的用法。下一節(jié)下一節(jié)中我們將針對(duì)初創(chuàng)公司端技術(shù)團(tuán)隊(duì)構(gòu)建的一些問題來闡述我們的團(tuán)隊(duì)如何構(gòu)建以及運(yùn)作的。
設(shè)計(jì)
“網(wǎng)絡(luò)請(qǐng)求 - 解析數(shù)據(jù) - 寫入緩存 - 讀取緩存”
在上篇的文章中我們說明了我們?cè)谑窃?MVC 層面的 M 層共享了代碼,不過對(duì)于只是“有可能”需要 OpenSDK 的團(tuán)隊(duì)來說,更重要的還是保證 M 層的代碼能夠支撐 VC 層的調(diào)用方式。我們?cè)诰帉懡缑娴臅r(shí)候,通常情況下是先從緩存(SQLite,下同)中查詢?cè)摻缑嬉呀?jīng)緩存的數(shù)據(jù)用于顯示一屏預(yù)覽數(shù)據(jù),此時(shí)在界面上某個(gè)角落顯示 HUD,然后發(fā)起網(wǎng)絡(luò)請(qǐng)求,請(qǐng)求到數(shù)據(jù)之后解析數(shù)據(jù)(JSON,XML,Protol Buffers),然后將數(shù)據(jù)類化寫入緩存——YES,就這么倆事(兒),too 易姿 too 森破。
網(wǎng)絡(luò)請(qǐng)求 - 解析“l(fā)ibcurl & json11”
我們團(tuán)隊(duì)在 Web 上用的是 MEAN Stack,對(duì)于 Client 來說,就是發(fā)起一個(gè)請(qǐng)求,然后獲得一個(gè)以 JSON 形式表示的結(jié)果,Client 將其解析為類,然后將結(jié)果同步到 SQLite 中,方便下一次緩存頁(yè)面的使用,在具體的使用中,我們參考 cocos2d-x 對(duì) libcurl 的封裝,并結(jié)合 C++ 11,封裝了一個(gè) HttpClient 用于普通的 GET/POST/PUT/DELETE 請(qǐng)求,對(duì)于 iOS 和 Android 的上傳和下載部分,我們?nèi)匀皇褂昧嗽姆椒?,因?yàn)橛行r(shí)候上傳和下載需要在“后臺(tái)”進(jìn)行,這意味著需要提供能訪問 framework API 的能力,對(duì)于 Windows 和 Mac,則可以繼續(xù)使用 HttpClient 中提供的 C++ 方法來進(jìn)行操作 (因?yàn)椴]有“后臺(tái)”一說)。請(qǐng)求下來數(shù)據(jù)之后,我們使用了 dropbox team 提供的 json11 進(jìn)行解析,類化。
寫入緩存 - 讀取緩存“easySqlite”
在數(shù)據(jù)緩存方面,我們選用了大家都說好的 SQLite,在 SQLite 的方案上我們其實(shí)做過一些探討——我們可以選擇 CoreData 作為 iOS/Mac 的方案,Android 也有原生的 Helper,Windows 則只能使用 C/C++ 的原生方案。經(jīng)過實(shí)踐我們發(fā)現(xiàn)其實(shí)在客戶端幾乎只有讀取緩存的需求——因?yàn)閷懭刖彺娴牟僮骺梢栽?C++ 層面完成——緊接在 HTTP 請(qǐng)求之后,所以我們就選用了所有平臺(tái)都使用 C/C++ 的方式進(jìn)行數(shù)據(jù)庫(kù)操作,查了幾個(gè)可選的 C/C++ 庫(kù)之后,我們覺得 easySqlite 是比較容易使用和維護(hù)的。(輕量是我們?cè)u(píng)估方案的一個(gè)重要參考指標(biāo),輕量不僅意味著小,而且意味著 fork 之后我們可以自己進(jìn)行修改而不用在弄懂里面的工作原理上花過分多的時(shí)間)
在緩存策略上,我們就是簡(jiǎn)單的將 JSON 解析后類的表存儲(chǔ)到數(shù)據(jù)庫(kù)中。這里有個(gè)小插曲,之前有看到有策略是將每個(gè)頁(yè)面的 JSON 直接存儲(chǔ)到數(shù)據(jù)庫(kù)中,然后取出的時(shí)候解析呈現(xiàn),不過我們的移動(dòng)端和桌面端有可能調(diào)用不同的 API 接口,而且如果按照頁(yè)面緩存,就不是一個(gè)適合放在 Core 層的方案了,故最終該方案還是沒有敵過我們一顆面向?qū)ο蟮男摹?/p> Prebuilt & Future
“Sakura”
由于我們?cè)?Worktile Pro 版與 Worktile協(xié)同版中使用了同一套的底層工具庫(kù),而 build 過 C++ library 的同學(xué)也應(yīng)該會(huì)覺得其實(shí)每個(gè)平臺(tái)看著對(duì)應(yīng)庫(kù)的文檔去 build 也是挺蛋疼的一件事情,所以我們將我們用到的 C++ 庫(kù) fork 一份并且編譯出來,連我們一起的弄出一個(gè) prebuilts 作為我們 C++ 的核心庫(kù)的工具庫(kù),用 git submodule 形式管理使用。(為了體現(xiàn)一點(diǎn)情懷,我們?nèi)∶麨?Sakura>>)
自動(dòng)構(gòu)建代碼 — Model Builder“人生苦短,我用 Python”
上文介紹的 C++ 跨平臺(tái)的目的,是在創(chuàng)業(yè)公司初期人少的時(shí)候提供一個(gè)可以很快出產(chǎn)品的技術(shù)方案,在我們編寫一個(gè)又一個(gè)的模塊時(shí),我們發(fā)現(xiàn)我們?cè)谧鲆粋€(gè)比較重復(fù)性的事情 ——寫一個(gè) User,寫一個(gè) UserManager 用于管理 User 相關(guān)的 API,為 UserManager 編寫一個(gè) FetchUsersFromCache, 用于從 SQLite 從讀取用戶的信息,然后編寫對(duì)應(yīng)的 Objective-C++ Wrapper 以及 Java Wrapper,然后我們編寫一個(gè)任務(wù)的模塊的時(shí)候,我們又重復(fù)了同樣的一個(gè)過程——當(dāng)然,細(xì)想一下,我們重復(fù)做的事情并不能通過在 C++ 設(shè)計(jì) Super Class 或者 Template 抽象出來,但是我們的的確確在用一套重復(fù)的思維方式,于是,我們將應(yīng)該由 Contributor 消費(fèi)腦力完成的設(shè)計(jì)過程提煉成 module.xml,然后編寫了一個(gè) Python 腳本用于生成 C++, Objective-C++ 以及 Java 部分的代碼>> 。
使用 Model Builder 構(gòu)建代碼的好處一方面是可以保證全部門的代碼風(fēng)格統(tǒng)一并且符合規(guī)范,另外也可以解決一些由于傳參太多或者重構(gòu)的時(shí)候順序亂了造成的一些低級(jí)錯(cuò)誤。不過需要特別提一句的是,即使使用了 Model Builder,我們?nèi)匀徽J(rèn)為只有 Unit Test 能保證你的代碼質(zhì)量,我們僅將 Model Builder 視為代碼構(gòu)建的輔助工具。另外,因?yàn)樵谖覀児疚覀儫o法獲取 Web 端的代碼,如果你所在的公司處在剛起步的階段,你完全可以考慮將 Model Builder 自行擴(kuò)展下使其能夠生成你們的樣式的 Web 端代碼以及文檔,這樣更讓聯(lián)調(diào)這一過程變得 smooth (因?yàn)榉祷氐?JSON 的 Key 聲明在了 module.xml 中,這樣就可以保證服務(wù)端所使用的 path 和客戶端的相同)。
示例代碼本篇我們將提供 iOS 以及 Android 示例代碼 來闡述我們上文中提到的用法。
下一節(jié)
下一節(jié)中我們將針對(duì)初創(chuàng)公司端技術(shù)團(tuán)隊(duì)構(gòu)建的一些問題來闡述我們的團(tuán)隊(duì)如何構(gòu)建以及運(yùn)作的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65890.html
摘要:下一節(jié)下一節(jié)中我們將以介紹我們是如何搭建一個(gè)包含網(wǎng)絡(luò)請(qǐng)求緩存的應(yīng)用。再下一節(jié)下一節(jié)中我們將介紹我們?nèi)绾问褂么a自動(dòng)構(gòu)建工具構(gòu)建出我們的層代碼以節(jié)約反復(fù)編寫同樣結(jié)構(gòu)代碼的時(shí)間。 動(dòng)機(jī) 好的代碼值得共享 快速完成第一版的原型,快速迭代,如同許多初創(chuàng) Sass 公司一樣,我們也同樣信奉這個(gè)時(shí)代快速迭代的開發(fā)方式,按照設(shè)計(jì),我們第一個(gè)上線的版本是我們的 Web 版以及 iPhone 端,緊接著...
閱讀 3339·2023-04-26 02:09
閱讀 2652·2021-11-24 09:39
閱讀 3322·2021-11-16 11:52
閱讀 3643·2021-10-26 09:50
閱讀 2800·2021-10-08 10:05
閱讀 2494·2021-09-22 15:25
閱讀 3332·2019-08-30 13:14
閱讀 947·2019-08-29 17:06