1. 程式人生 > >後端開發者從零做一個移動應用(後端篇)

後端開發者從零做一個移動應用(後端篇)

先來上一張前端頁面的效果圖(Vue + Vux + Vuex + Vue-Router)。
image

* 第一次做gif 沒什麼經驗,太大了。載入慢 *

專案地址: http://m.jiasux.com ,大家可以自行手機開啟檢視效果。

好了,廢話少說,來聊聊後端

後端寫些什麼,什麼東西寫出來對我是更好的總結,也是對大家更好的幫助?在準備寫的時候,我思考了很久。

之前準備了 手摸手,嘴對嘴 教程。想一想這樣子沒什麼意思,如果是一步步做的教程還不如看視訊去,就想也許通過總結後端結構(注意是結構不是架構)設計、程式碼組織、模組劃分對大家更有幫助。

後端開發的疑惑

後端開發最常面對的一個問題:效能、高併發等等。但是這不在本文的討論範圍,我們只講基本的怎麼把程式碼寫好,如何把業務模組劃分好。

效能、高併發的解決方案, 大部分是在程式碼之外的擴充套件。

那麼站在純粹的 寫程式碼 角度,如何寫好後端的程式碼呢?我以前的疑惑常常有:Controller 層到底放哪些程式碼?Model 又可以做哪些事情?自己的一些擴充套件、工具類,該如何組織?

發現現在能夠想起的疑惑變少了,如果你有什麼疑惑,歡迎留言我們一起學習討論

雖然程式碼主要是實現業務邏輯,但是選擇一款好的框架,非常有助於提升團隊作業能力,讓程式碼層面的效能無憂。

框架的選擇

說實話,自感 php7 出來後,程式碼層面的效能,已經到了一個非常高的層度。基本上在百萬級別左右的系統,在語言層面沒有什麼顧慮了。

框架方面,自己用過的php框架包括(時間先後):ThinkPHP

Laravel 非著名自造框架 Yii Phalcon

本文所有程式碼結構設計與組織設計基於 Phalcon ,其它除了 自造框架 都是非常優秀的框架,不過框架層面的效能,就自身而言,是逐步升高。但是通過一些整合,也可以逐步提升其自身效能,如:Laravel YiiSwoole結合,也可達到 Phalcon 的程度。

php的版本是:7.1(如果你是一個新專案,一定要用php7)

後端要做些什麼

當然肯定需要先把db設計好,不過這不在我們討論範圍,假設已經完成了這一步。

我們的程式碼需要提供以下幾部分能力:命令列指令碼、api版本、後臺管理這三部分。當然這三部分也可以拆分成三個專案,不過小公司、小專案沒有必要(放在一個專案,加強了程式碼的複用性)

這三個是大的模組,然後再一個個接下來分析。

命令列指令碼

先說 命令列指令碼 它是比較獨立的部分,不需要使用者呼叫,主要用來完成一些定時任務等。現代一點的框架,都提供這個模組。
Phalcon提供了一個 CLI 模組,可以方便的完成這部分能力。他的程式碼寫起來還是 mvc 的結構,只不過訪問是通過命令列來進行。

比如一個最簡單的 cli

class MainTask extends Task
{
    public function mainAction()
    {
        return fwrite(\STDOUT, 'hello task!')
    }
}

api模組

我在最早接觸api概念的時候,很懵逼,覺得很高大上。現在我對它的理解就是:前後端純資料通訊的一種方式。以前做web開發,我們不提供api,直接後段把資料渲染在頁面上,使用者直接在渲染的介面上操作,然後通過按鈕或者什麼觸發一個請求到後端。

而到了api時代,在web方面有了前後端分離概念;移動app後端更是無力渲染(天然前後端分離)。所以要後臺需要把資料發給前端,前端根據資料的描述把資料用使用者看得懂的方式展現出來。比如一個商品的api可能結構如下:

{
    code: 1,
    msg: 'query ok',
    data: {
        name: '最涼快的空調',
        price: '9999.00',
        img: 'xxx.webp',
        stock: '10'
    }
}

這種方式讓前後端的開發彼此獨立,大家專注做自己的事情。但是這也帶來另外一個問題:前端有了所謂的版本,後端必須兼顧所有使用的版本。如果我們永遠只使用一個api地址。那麼程式碼可能會相當難看。

比如現在有了一個新的需求,以前 空調 只有一張圖片。現在空調展示的時候有多張圖片。那麼有兩種辦法,一種是增加欄位,一種是將原欄位 img 變為一個數組。

如果是增加欄位不會帶來相容性的問題。但是如果是粗暴的將img型別變更為陣列,之前的版本將無法解析這個型別,因此要想變為陣列,只能是api的整體升級(一般不會因為這個問題就進行升級)。

那麼api做版本有哪些辦法呢?我採用了Phalcon的模組來做api的版本控制。以前還嘗試過控制器版本。比如:
ApiV1Controller 表示這是v1版本。ApiV2Controller表示是v2版本。Phalcon的模組為版本提供了非常大的便利,直接新開一個模組,取名 v1,如果之後要升級,新開一個模組叫做 v2。對於不需要修改的功能,可以簡單的讓v2控制器繼承v1中的控制器。

後臺管理

絕大部分系統,都需要一個cms來上傳、修改相關資料。以加速俠為例:需要上傳遊戲,需要編輯一些遊戲合輯等。你可以單獨成一個專案,也可以還是用模組來進行開發(我推薦,極大程度的提供了程式碼複用)。

我最不能接受的一句話是:後臺順便弄一下,反正給公司內部用的。

做為一個有追求的程式設計師,我們必須要有底線,我們的目標是:讓大家工作起來更便捷,更輕鬆,最後讓大家沒有工作(哈哈哈)。所以後臺我也建議採用前後端分離,通過Vue來進行開發。

當前的後臺使用了 Vue + Element UI + Vuex + Vue-Roter來進行開發。參考了,網路上的: 手摸手,帶你用vue擼後臺,寫的真不錯,為我學習省了很多彎路,特別是前端在許可權控制上這一部分,他的方式讓我眼前一亮。我的後臺現在才剛剛搭建完基本的部分(路由規劃、一些自己擴充套件的vue外掛)
image

前後端分離後,後段其實也可以歸結到api的開發部分。並且這樣帶來的一個好處是:如果以後後段要做移動版的一些功能,api都是現成的。

未完待續

寫程式碼越久,越發現語言層面的東西,只要多動手,很快就能達到一個水平。但是業務程式碼寫的再多,也不能讓你再技術領域走的更遠。因此如果你有幸在大公司,有機會接觸大型專案(百萬、千萬使用者級)的,一定好好觀察為了這個專案這麼多人開發,還能夠很好的運作?他是如何解耦業務邏輯與系統架構?如果是在小的公司,那麼就儘可能自己嘗試去做一些系統的搭建,讓大家在這個基礎上進行業務開發,而不需要關心一些底層的東西,一個新手也能很快上手寫業務。

後面可能還會有兩篇到四篇講後端部分。主要包括,後端專案結構的劃分(這個結構我已經嘗試過在3、4個專案中使用,目前都執行的很好),後端登陸控制(會開源一個Phalcon的oauth2的程式碼),後段api的自動化測試。

相關程式碼我將會陸續放在github上面。所有的程式碼就叫 x- 吧。x 從小學數學給我留下了深刻印象。
- x-api 是php的後端專案
- x-control 是vue寫的後端管理系統
- x-client 是vue系的客戶端介面

如果你對我的內容感興趣,請關注我的微信公眾號:

公眾號:icanfo

image