這麼多開源框架,該用哪一個好?

想必這樣的問題,你們都有疑惑過。我想大部分的疑惑無非如下幾點:git

  1. 這個框架穩定嗎?要是有bug怎麼辦?github

  2. 這個框架能知足個人全部需求嗎?若是用到一半發現不適用該怎麼辦?數據庫

  3. 這個框架耦合度高嗎?是否能按照需求再去定製擴展?express

 

先不看以上幾點,咱們先來講什麼樣的框架必定必定不要採納:緩存

  1. 聚合型框架必定要放棄(好比Afinal,xUtils),why?越是大而全,越容易牽一髮而動全身,並且在框架世界裏沒有1+1>2這一說。相反的可讀性差,耦合高,難擴展。是Afinal中的圖片緩存好仍是fresco,Picasso等好,不言而喻了吧?網絡

  2. github上last commit超過一年以上或者issues一大堆沒fix的必定不要使用。這其中會有不少坑,要是出問題了,你都不知道找誰問。相應的,我最怕別人問的問題就是:Stay,你用過xxx框架麼?幫我看看這問題吧。。架構

  3. 仿 xxx UI效果大全,請慎重使用,若是能夠,多跟產品經理溝通,儘可能使用Material Design設計,另外能夠參考InstaMaterial。別把大量時間跟精力花在了調UI效果上。UI性能與潛在bug是最很差調試的。大多數人對touch事件,view繪製都是隻知其一;不知其二。框架

 

經過上述條件,基本能夠pass掉60%的開源項目。技術更新仍是很快的,不少之前實現複雜或者根本無解的需求在將來都能有很好的解決方案。當你好幾天都沒找到你想要的解決方案,不妨去作溝通,選用其餘替代需求。異步

若是你的項目在從0到1的初始階段。async

不妨先花上一週時間來作調研。這是款什麼樣的產品,作作競品分析,考慮將來可能會有的擴展。根據產品業務來選擇框架纔是最優解。總體項目結構在將來重構的可能性很是小,因此一開始得儘量得多去考慮擴展,否則會很是痛苦。

另外,你能夠放心大膽的去嘗試新出的開源lib,但凡寫框架,都以簡單易用爲最根本目的,隨着技術的推動,新出的框架也會吸取前人的經驗而愈來愈成熟。並且用戶量還不多,前期還有很長的過渡期,你有充足的時間來驗證這個框架是否好用。

若是你的產品在從1到N的成熟階段。

這個時候每一個框架的更換都須要慎重考慮了,在用戶基數大的狀況下,任何一個bug都會致使嚴重的後果。儘量的採用灰度發佈,小規模測試後再統一升級。

比方說,你以爲universal-image-loader不夠好用,常常oom,並且下載顯示速度慢,那你能夠選擇fresco,picasso對吧。那麼,若是你之前沒有對圖片緩存框架進行一次再封裝,儘可能在你換框架時作一下封裝。即:別在代碼中顯示的調用UniversalImageLoader.display()或fresco.display(),由於這些代碼被調用的地方太多了,一旦你要換框架,那麼要改的地方就炒雞多。爲了之後再發生這樣的問題,不妨將它們再包一層。之後就輕鬆些。你說對吧。

或者說,IM的消息收發,如今有那麼多平臺的雲推送,如何選擇也是個問題,若是拿不許,那麼在使用以前要儘可能去解耦和,別顯式調用任何雲推送API,本身再包裝一層,這樣隨便你怎麼換,都不須要去更改業務邏輯,只用替換雲平臺API就ok了。

至於相似框架之間該如何選擇,其實都差很少,有一些準則,僅供參考:

  1. 若是框架A依賴另外的jar比較多,謹慎使用,學習也是要成本的。

  2. 若是框架B沒有詳細的文檔,謹慎使用,理由同上。

  3. 若是框架C對你目前的App影響較大,改動的地方多,那麼謹慎使用。

  4. 若是框架D耦合度高,不方便擴展,謹慎使用。

差很少就這些,開源lib太多了,你mark的那些lib,能用上10%就很是不錯了,能熟讀1%的源碼並擴展,也算是個senior developer了。

說了這麼多,好像什麼也沒講,爲何會寫這篇文章,是有同窗問我該如何選。

若是上述都不能理解,那我就直說該用什麼好了。我項目裏差很少都用本身寫的框架,除了一些UI會找lib,能本身寫的基本本身動手,畢竟架構再完善也很難去知足一個特定的需求。

如下純推薦,不表明我用過,要是出問題了,別來責問我哈。

網絡層: Retrofit或者Volley+OkHttp,async-http-lib儘可能就別用了,比較老。另外這些都須要再進一步擴展的,能夠本身搜下,有用的就集成進去。 
數據庫: Ormlite或者Realm,要加密的話用SqlCipher 
圖片緩存: Fresco, Picasso,若是集成的效果不理想,多看看配置參數是否正確 
工具: 查內存泄漏(leakcanary)異步通知(RxJava謹慎使用)數學計算表達式(expression4j)日期處理(joda time)

至於UI層的lib我就不細說了,自行搜索。

知易行難,遇到問題耐心一些,在寫代碼以前多分析多google,務必把後期的重構花到前期去。

相關文章
相關標籤/搜索