成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Worktile 移動團隊如何使用 C++ 完成 Worktile Pro 跨平臺應用開發(fā)

NSFish / 1362人閱讀

摘要:下一節(jié)下一節(jié)中我們將以介紹我們是如何搭建一個包含網(wǎng)絡(luò)請求緩存的應用。再下一節(jié)下一節(jié)中我們將介紹我們?nèi)绾问褂么a自動構(gòu)建工具構(gòu)建出我們的層代碼以節(jié)約反復編寫同樣結(jié)構(gòu)代碼的時間。

動機

“好的代碼值得共享”

“快速完成第一版的原型,快速迭代”,如同許多初創(chuàng) Sass 公司一樣,我們也同樣信奉這個時代快速迭代的開發(fā)方式,按照設(shè)計,我們第一個上線的版本是我們的 Web 版以及 iPhone 端,緊接著,我們面臨著需要做 Android 移植開發(fā)的需求,這時擺在我們面前的有幾個糾結(jié): 如果開放 iPhone 的源碼給 Android 的同學 “翻譯” 一遍 iPhone 的工程了話可能會面臨同樣的一個 Bug 被 duplicate 了一遍,然后 iPhone 的改了,再建個任務(wù)給 Android 的同學 - “Hi, 我們這里改了一個 Bug, 你們也改改吧”,然后每做一個模塊,再各自產(chǎn)生一堆的 Bug,再瘋狂的改 Bug - 好的代碼沒有被復用,只是 Bug 被一次又一次的提上日程。而且在快速迭代中,我們需要用很少的人力(1 iOS, 1 Android)來完成初期版本的開發(fā),而且在快速的迭代過程中,我們需要頻繁的面對諸如接口變動,某個類添加了一個字段這種需求,所以我們自然開始探索起一份跨平臺的解決方案。

在探索了當前主流的跨平臺技術(shù)路線中,runtime 方式跨平臺的(如嵌入一個 WebView)方式由于其性能有明顯的滯后感并沒有列入我們的考慮范圍,我們主要考慮了使用 C++ 這種各個平臺都支持的方案以及“翻譯系”的方案(j2objc 等) 后,針對我們的背景: 開發(fā)人員比較少,而且之后招聘到的人員應當是以原生平臺語言為主 (這點在事后被證明創(chuàng)業(yè)公司非常需要考慮,比如做 iOS 開發(fā)的招到一個會 Swift 的也會 Java 的相對來說還是很困難的),最終決定使用 C++ 11 作為核心庫的語言 (核心庫指的是 MVC 中 Model 層的所有代碼)。

在1年半的實踐中,C++ 11 帶來的好處主要有

穩(wěn)定: C++ 的方法幾乎不會出現(xiàn) deprecated 的狀況,相對于我們 iOS 使用 Swift 幾乎每次 Swift 都有代碼遷移的工作, C++ 的代碼部分極其穩(wěn)定

性能: 這點其實在對性能要求相對較低的 App 開發(fā)領(lǐng)域,其實不是特別特別需要考慮的問題

容易搜索: 作為一門歷史悠久的成熟語言,大部分的問題都可以 Google 出來 (這點其實也是非常重要的)

單元測試: 依賴于 gtest,單元只需要寫一遍, 并且可以運行于所有的平臺之上 (單元測試是我們目前發(fā)現(xiàn)的唯一一種可以保證代碼質(zhì)量的方法)

有現(xiàn)成的代碼規(guī)范: 基于 Google C++ Code Style 以及其提供的 lint 檢測工具,我們可以很大程度上保證 C++ 代碼的可讀性,這份 Code Style 很好的解決了 C++ 內(nèi)存管理部分難以判斷的問題

方法

“C++ 11 是一門全新的語言”

C++ 在 iOS 上可以通過 Objective-C++ 的形式進行幾乎原生的調(diào)用,并且由于 C++ 11 Smart Pointer 的出現(xiàn),幾乎不需要進行額外的內(nèi)存管理。

在 Android 平臺上,C++ 是通過 NDK 進行的調(diào)用,對于 Java 的開發(fā)者來說, C++ 仍然是一門有著比較陡峭的學習曲線的語言,但是在工程開始初期,團隊只需要1名 C++ 的編寫者,所以還是有比較充分的學習時間留給 Android 開發(fā)的同學。

在成功的 Hello World 之后接下來就是考慮一些常用模塊的遷移 (這里也是一個極其重要的需要預先調(diào)研的地方,如果一個功能的第三方庫沒有找到很好的 C++ 的替代品,那么用 C++ 自行實現(xiàn)一次有時候會是一個非常巨大的成本)

對于我們常用的網(wǎng)絡(luò)鏈接、緩存等功能,都已經(jīng)有一些現(xiàn)成的成熟第三方庫可以滿足我們,對于 App 開發(fā),常見的有:

HTTP 網(wǎng)絡(luò)連接: (libcurl)

SQLite 持久化存儲(easySqlite)

JSON 解析 (json11)

XML 解析 (tinyxml2)

Websockets (libwebsockets)

Key-value 緩存 (levelDB 或者用 SQLite)

結(jié)構(gòu)

如上圖所示,我們將所有復雜的核心邏輯都寫在了 C++ Core 這層,Objective-C++ 和 Java Wrapper 只是簡單的將 C++ 的方法以 Objective-C 和 Java 的形式暴露給了 App Developer 進行調(diào)用 (Win C++ 可以直接調(diào)用標準 C++,只需要 dll import/export 好了對應的代碼就行)。對于 UI 層的界面代碼,我們?nèi)匀皇褂?Swift 以及 Java 進行書寫,這樣可以保證我們最大可能的能獲取原生 App 帶來的好處,以及對系統(tǒng)自身的 API 訪問的便利性,而且原生的 App 開發(fā)者在進行產(chǎn)品布局等改動的時候也能最大程度的獲得原生平臺的大量的第三方庫的幫助。

示例代碼

本篇我們將提供最簡單的 iOS 以及 Android [示例代碼]來闡述我們的結(jié)構(gòu)。

下一節(jié)

下一節(jié)中我們將以 Worktile OpenAPI 介紹我們是如何搭建一個包含網(wǎng)絡(luò)請求、緩存的應用。

再下一節(jié)

下一節(jié)中我們將介紹我們?nèi)绾问褂么a自動構(gòu)建工具構(gòu)建出我們的 Model 層代碼以節(jié)約反復編寫同樣結(jié)構(gòu)代碼的時間。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/65761.html

相關(guān)文章

  • Worktile 移動團隊如何使用 C++ 完成 Worktile Pro 平臺應用開發(fā)<2

    摘要:請求下來數(shù)據(jù)之后,我們使用了提供的進行解析,類化。示例代碼本篇我們將提供以及示例代碼來闡述我們上文中提到的用法。下一節(jié)下一節(jié)中我們將針對初創(chuàng)公司端技術(shù)團隊構(gòu)建的一些問題來闡述我們的團隊如何構(gòu)建以及運作的。 設(shè)計 網(wǎng)絡(luò)請求 - 解析數(shù)據(jù) - 寫入緩存 - 讀取緩存 在上篇的文章中我們說明了我們在是在 MVC 層面的 M 層共享了代碼,不過對于只是有可能需要 OpenSDK 的團隊來說,更...

    seanHai 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<