開發(fā)者的價值,是通過技術(shù)和產(chǎn)品體現(xiàn)的,對于App開發(fā)來說,除了實現(xiàn)業(yè)務(wù)之外,最重要的莫過于開發(fā)的速度、質(zhì)量和可維護性,速度決定你能否支撐公司搶占市場,質(zhì)量決定你們能不能站穩(wěn)位置不被迅速踢走,可維護性決定你們繼續(xù)前行時能否保持輕快的步伐。

南昌APP開發(fā),南昌APP制作,南昌app開發(fā)公司,南昌小程序開發(fā),南昌網(wǎng)站建設(shè),江西APP定制開發(fā)
速度、質(zhì)量和可維護性
對速度、質(zhì)量和可維護性的要求,其實就是又快,又穩(wěn),又清晰的要求。
快:快其實是最容易做到,或者說最容易知道能不能做到的事情,熟悉的Android開發(fā)的朋友都知道,如果能理清業(yè)務(wù)邏輯,不受干擾地投入開發(fā),開發(fā)速度可以很快,一般普通規(guī)模的App,一到兩周就能完成。
穩(wěn):穩(wěn)不像快,可以簡單地用時間進行即時的量化評價,我們要等大量bug出現(xiàn)之后,才知道穩(wěn)不穩(wěn),可是一般趕工速度一快起來,就很容易出現(xiàn)大量bug。其實Android常見問題無非是內(nèi)存、異步、響應(yīng)等,要排除和解決這些問題很容易,難的是怎樣確保不出現(xiàn)這些問題。
清晰:清晰是最難做到的,快可以通過時間量化,穩(wěn)可以通過bug統(tǒng)計量化,但是清晰是很難量化的,代碼審查和可擴展性都是主觀評價,而且相當(dāng)滯后,很多情況下,往往要等到需要實現(xiàn)擴展,甚至換人接手代碼時,才知道代碼不清晰。
對于開發(fā)者來說,怎樣才能又快又穩(wěn)又清晰地開發(fā)App,這里梳理了我的幾點心得。
有限參與業(yè)務(wù)設(shè)計
從職責(zé)分工上,業(yè)務(wù)設(shè)計是運營部門和產(chǎn)品經(jīng)理的工作,確實不應(yīng)由研發(fā)負(fù)責(zé),但我說的是參與,研發(fā)(包括測試)應(yīng)當(dāng)盡早參與業(yè)務(wù)設(shè)計,一方面提前發(fā)現(xiàn)問題,另一方面可以引導(dǎo)和建議技術(shù)路線。
研發(fā)參與設(shè)計,可以規(guī)避很多問題,例如通信壓力、加載速度、延遲時間、硬件負(fù)載等移動開發(fā)特有問題,不能指望運營和產(chǎn)品能像專業(yè)的研發(fā)一樣面面俱到,考慮周翔。
另一方面,研發(fā)參與設(shè)計還可以引導(dǎo)技術(shù)路線,例如采用原生App、混合App還是ReactNative形式,采用單用戶體系還是多用戶體系,采用什么收費形式等。
在實際操作中,業(yè)務(wù)設(shè)計諸如收費形式,異常提示,乃至于業(yè)務(wù)邏輯上的嚴(yán)密性,你都可能發(fā)現(xiàn)漏洞。
當(dāng)然,參與設(shè)計必然會占用研發(fā)時間,有人會覺得委屈,感覺這是替產(chǎn)品做了他們的工作,但其實研發(fā)參與設(shè)計,省下的還是自己的時間,因為無論產(chǎn)品如何設(shè)計,最終都需要技術(shù)來研發(fā)實現(xiàn),如果設(shè)計上出了問題,你修改代碼的投入,可比產(chǎn)品改文檔的那點兒投入大多了。
當(dāng)然,公司層面也應(yīng)有清楚的定位,研發(fā)對設(shè)計的投入,必須是有限的指導(dǎo)性的,如果大量把研發(fā)投入到設(shè)計工作,就是另一種形式的浪費了。
異常處理
在實際開發(fā)過程中,除bug其實占了相當(dāng)一部分工作量,有時候好好的開發(fā)計劃,因為幾個詭異的bug就得耽誤半天,所謂“碼字5分鐘,排錯兩小時”是也。所以,能否盡早盡快處理異常,是非常影響開發(fā)效率的。
處理異常,我有這么幾條心得:
提前考慮異常處理,在寫正常流程的業(yè)務(wù)代碼之前,先考慮異常,“未慮勝,先慮敗”,沿著業(yè)務(wù)流程分支,先把異常情況都處理掉,例如獲取在線數(shù)據(jù)顯示一個列表,先考慮網(wǎng)絡(luò)異常、服務(wù)器報錯、數(shù)據(jù)失敗等異常情況,并依次給出相應(yīng)提示,最后才處理數(shù)據(jù)正常的情況,你本來就要寫正常業(yè)務(wù)代碼和異常處理代碼,你只需要調(diào)換一下工作的先后順序,其實你投入的開發(fā)時間沒有增加,但是你的效率卻大大提升了,因為一旦出現(xiàn)異常,我們可以迅速判斷異常原因,節(jié)省大量時間。
這樣做還有一個好處,在你的思維陷入復(fù)雜的業(yè)務(wù)邏輯之前,先處理相對簡單的異常分支,可以避免你被業(yè)務(wù)邏輯搞到大腦缺氧后,再回來處理異常分支時一時疏忽手滑,寫錯或者寫漏異常處理。
隔離前后臺對接的數(shù)據(jù)接口,最好不要直接使用后臺提供的數(shù)據(jù),中間加一層映射,一方面,如果后臺數(shù)據(jù)出了問題(數(shù)據(jù)異常、變更字段等),你在映射數(shù)據(jù)時就能發(fā)現(xiàn)和定位問題;另一方面,也有利于你采用更適合App的數(shù)據(jù)形式進行數(shù)據(jù)持久化。
另外,建議做一個接口錄入與檢查工具,形式不論,但要能輕松地維護前后臺接口,最好能自動檢測接口反饋是否正常(服務(wù)器負(fù)載過大、字段變更、第三方服務(wù)過期等)。
異常信息的收集、匯總和數(shù)據(jù)持久化
如果出現(xiàn)異常,最重要的是采集到異常代碼行(如MainActivity第61行)和異常原因(如空指針異常),并記錄為本地文件以備上傳和查看
具體見App的異常崩潰處理:
其實java的異常處理的內(nèi)容還有很多,感興趣可以看一看我以前總結(jié)過的Java異常捕獲的設(shè)計原則:
結(jié)構(gòu)分層
使用框架是必須的,Model層,View層必須職責(zé)單一,至于使用MVP、MVVM還是別的什么就看個人偏好和項目需要了。個人比較偏好MVP,感興趣可以看一看MVP框架的演化當(dāng)然,Rx鏈?zhǔn)骄幊桃膊诲e。
* 個人在結(jié)構(gòu)分層上,有這么幾個經(jīng)驗:
高內(nèi)聚的數(shù)據(jù)層,把與數(shù)據(jù)讀寫相關(guān)的處理,網(wǎng)絡(luò)讀寫、本地讀寫、緩存數(shù)據(jù)等,包括模擬數(shù)據(jù),都集中到數(shù)據(jù)層,通過回調(diào)或鏈?zhǔn)秸{(diào)用等方式拋出數(shù)據(jù)給業(yè)務(wù)層,通過多版本機制切換模擬數(shù)據(jù)和真實數(shù)據(jù)。
松耦合的Activity,界面應(yīng)該是與業(yè)務(wù)相關(guān)最低的,主要提供一個顯示載體,并觸發(fā)生命周期處理,Activity應(yīng)該可以很容易地被替換掉。
獨立且方便測試的業(yè)務(wù)層,業(yè)務(wù)層應(yīng)該可以實現(xiàn)自動化測試,這非常重要,即使你不去實施自動化測試,把代碼寫成可以自動化測試的,也能幫你優(yōu)化代碼,該抽象的抽象,該剝離的剝離。
必要時抽象特殊控件,如果控件需要復(fù)用,就不要讓控件融合進Activity,而是抽象為獨立的顯示控件,這樣既能解耦合,又方便復(fù)用。
不要過度設(shè)計
敏捷開發(fā)里有一個實踐原則,就是不要過度設(shè)計,開發(fā)的價值不在于寫出漂亮的代碼,在于實現(xiàn)產(chǎn)品并支撐其正常運轉(zhuǎn),在能實現(xiàn)產(chǎn)品功能的前提下,代碼邏輯其實是越簡單越好,簡單往往就意味著高可靠性+低維護成本,如果將來需要擴展功能,可以通過修改和重構(gòu)實現(xiàn)。
當(dāng)然,簡單并不意味著隨意,要把事件做復(fù)雜很容易,要做簡單卻很難。能做到邏輯清晰、線程安全、內(nèi)存安全,又容易修改和擴展的同時,還能保持代碼簡潔,其實反而更考驗功力的。
其實不僅在開發(fā)新功能時要避免過度設(shè)計,在維護和擴展舊代碼時,也要注意,能正常運行的代碼,都是好代碼,我覺得在維護舊代碼時,其實也適用開放封閉原則,對不得不改,不改就崩的舊代碼,是開放的,可以修改的;對能正常運行的代碼,哪怕你覺得再難看再手癢,那也是封閉的,是不可以修改的。
回到那句話,開發(fā)的價值不在于寫出漂亮的代碼,在于實現(xiàn)產(chǎn)品并支撐其正常運轉(zhuǎn)。
通用庫的建立與維護
我們知道,項目管理有四個要素,時間、成本、范圍、質(zhì)量,這四個要素一般是不能兼得的,要時間,就得砍一些范圍的項目目標(biāo),降成本,就容易犧牲質(zhì)量,等等,不過,建立和維護通用庫,卻能同時對四個要素都有好處。
加快開發(fā)速度,專注于具體業(yè)務(wù)(時間)
降低團隊成員熟悉項目的成本,為新業(yè)務(wù)開發(fā)提供基礎(chǔ),加快開發(fā)迭* 代速度,有利于更快地發(fā)布版本
提高代碼復(fù)用率,降低開發(fā)投入(成本)
穩(wěn)定的公共模塊采用依賴組件庫方式,提供給各個業(yè)務(wù)線協(xié)作使用,* 減少重復(fù)開發(fā)和升級維護工作量
提升開發(fā)效率,更容易實現(xiàn)項目目標(biāo)(范圍)
對已實現(xiàn)過的功能/業(yè)務(wù),抽象出通用模塊,再有類似的需求,能夠 迅速實現(xiàn),更容易實現(xiàn)項目的業(yè)務(wù)需求
提升產(chǎn)品質(zhì)量,持續(xù)改進通用功能(質(zhì)量)
頻繁使用的功能/業(yè)務(wù)模塊采用組件復(fù)用方式,更有利于暴露缺陷, 一處修改,多處受益,提高產(chǎn)品質(zhì)量
工具與模板等
其實說起提高效率,前面的很多經(jīng)驗因為需要在實際開發(fā)中慢慢體會,難以迅速上手,反而是工具模板,真正見效快,一次安裝,終生受益 :)
就我的經(jīng)驗而言,對我開發(fā)效率幫助最大的,包括代碼模板、常用配置和開發(fā)插件,以及著名的程序員在線交友網(wǎng)站Github。
代碼注釋
一般來說,程序員看自己一個月前寫的代碼,是完全陌生的,我也一樣,基本上過一個月就沒印象了,但是如果要修改/擴展怎么辦,這時候,就得看代碼注釋了。就個人經(jīng)驗而言,有這么幾個地方,一定要寫注釋:
接口,特別是MVP的Contract接口,這里面基本定義了你的主要業(yè)務(wù)行為,誰來加載數(shù)據(jù),誰來顯示數(shù)據(jù),誰觸發(fā)的下一步操作,這些內(nèi)容寫明白了,以后讀代碼,只要看接口就知道主要業(yè)務(wù)是怎么回事兒了。
服務(wù)、廣播等,服務(wù)和廣播因為沒有界面,容易游離在業(yè)務(wù)邏輯鏈條之外,在業(yè)務(wù)邏輯上缺少上下文,就必須有詳盡的注釋,說明其業(yè)務(wù)場景。
南昌APP開發(fā),南昌APP制作,南昌app開發(fā)公司,南昌小程序開發(fā),南昌網(wǎng)站建設(shè),江西APP定制開發(fā)
初始化、注入等,如果自定義了一些擴展的功能或控件,要求執(zhí)行某些初始化函數(shù),或者要注入特定功能的,就必須寫好注釋,提示調(diào)用者進行必要的操作。
TODO,工作總要排優(yōu)先級的,有些工作暫時延后,自己記錄是沒用的,團隊開發(fā)最終用的還是代碼,所以一定要寫TODO,提示開發(fā)者,這里是未完成的狀態(tài),避免不必要的誤會和延誤。
南昌樂騰科技有限公司是國內(nèi)8年專業(yè)從事南昌APP定制開發(fā)、南昌微信小程序開發(fā)、南昌微信應(yīng)用開發(fā)、南昌網(wǎng)站建設(shè)、南昌電商網(wǎng)站平臺開發(fā)的公司,我們致力于成為國內(nèi)最好的互聯(lián)網(wǎng)應(yīng)用研發(fā)公司??蛻魺峋€:4006881286