1. 程式人生 > >這麼多開源框架,該用哪個好?

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

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

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

  2. 這個框架能滿足我的所有需求嗎?如果用到一半發現不適用該怎麼辦?

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

先不看以上幾點,我們先來說什麼樣的框架一定一定不要採納:

  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的初始階段。

不妨先花上一週時間來做調研。這是款什麼樣的產品,做做競品分析,考慮未來可能會有的擴充套件。根據產品業務來選擇框架才是最優解。整體專案結構在未來重構的可能性非常小,所以一開始得儘可能得多去考慮擴充套件,不然會非常痛苦。

另外,你可以放心大膽的去嘗試新出的開源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,務必把後期的重構花到前期去。

相關推薦

這麼開源框架哪個

想必這樣的問題,大家都有疑惑過。我想大部分的疑惑無非以下幾點: 這個框架穩定嗎?要是有bug怎麼辦? 這個框架能滿足我的所有需求嗎?如果用到一半發現不適用該怎麼辦? 這個框架耦合度高嗎?是否能按照需求再去定製擴充套件? 先不看以上幾點,我們先來說什麼樣的框架一定一定

目前最受歡迎的12個Python開源框架過幾個?

python 爬蟲 web 入門 開源 今天給大家帶來了12個在GitHub等開源網站中最受歡迎的Python開源框架。如果你正在學習python,那麽這12個開源框架,千萬別錯過,這些框架包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你

一個mybatis開發框架比JPA比MyBatis generator

count object 配置數據庫連接 用例 簡化 git wire down -s fastmybatis fastmybatis是一個mybatis開發框架,目的為簡化mybatis的開發,讓開發更高效。 零配置快速上手 無需編寫xml文件即可完成CRUD操作 支持

官宣!——放出框架免費並允許商用開源進行到底!

關注訂閱號"magiccodes"輸入“福利”即可領取Magicodes.Admin、Magicodes.WeiChat以及眾多元件。 所有程式碼均已開源,大家可以通過關注訂閱號"magiccodes"獲取最新資訊以及程式碼。 除了Magicodes.Admin,我們還開源了Magicodes

個Fragment之間的切換什麼方法呢?

最近在開發過程中使用Fragment做很常見的類微信介面,底部四個可選項,首頁、課程、發現和我的,每點選其中一個,在上方顯示不同的Fragment,如下圖: 起初我並沒有考慮太多,用了最簡單的方式,直接使用replace方法,程式碼如下: getSupportFragm

這麼Linux版本你究竟怎麼選擇?

Linux有非常多的版本,比如世面上常見的有 Ubuntu、RedHat、Fedora、Centos等等,這麼多的版本我們究竟該選哪一個呢?今天我帶大家對各個版本進行一下分析和比較,幫助大家來做出更好的選擇。   (一)Linux 是什麼? 首先了解一下Linux是什麼。它是一套類UNIX的作業系統

剛學會 C++ 的小白這個開源框架做個 RPC 服務要多久?

> 本文適合有 C++ 基礎的朋友 ![](https://img2020.cnblogs.com/blog/759200/202102/759200-20210221091640067-1483477160.jpg) 本文作者:HelloGitHub-Anthony HelloGitHub 推

調侃物聯網開源框架我們什麽時候也來開源一個?

連接 blank ack sdn track 協議 can led 之前 前段時間高通公司開源了眼下 較火的開源框架AllJoyn框架 個人對這個框架並

從GitHub中整理出來的15個最受歡迎的Python開源框架你喜歡哪個

python 開源 框架 爬蟲 web 從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。Django: Python Web應用開發框架Django 應該是最出名的Python框架,GAE甚至Erla

8個最高效的Python爬蟲框架過幾個?

python 爬蟲 入門 詳細 官網 小編收集了一些較為高效的Python爬蟲框架。分享給大家。1.ScrapyScrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。。用這個框架可以輕松爬下來如亞馬遜商品信息之

專訪李偉:這麼程式語言為什麼我選擇了C++?

C++是一門被廣泛使用的程式語言。在眾多的C++開發者中,大多數人用面向物件的方式編寫程式碼:我們日常接觸的C++專案基本上都是用這種風格組織的;幾乎每一本C++教程都會用絕大部分篇幅來討論面向物件;每位擁有數年C++開發經驗的程式設計師都會對面向物件有自己的見解。   面向物

這麼監控元件總有一款適合你

更多文章,請移步微信公眾號《小姐姐味道》 mp原文 mp.weixin.qq.com/s?__biz=MzA… 監控是分散式系統的必備元件,能夠起到提前預警、問題排查、評估決策等功效,乃行走江湖、居家必備之良品。 監控系統概要 功能劃分 一個宿主機cpu的報警叫做監控;一個業務日誌的報錯叫做監

Chrome播放RTSP實時視訊什麼技術可以做到500毫秒延遲

早上開啟Chrome,想試一下Chorme 播放flash的視訊延遲,大家看下面這個圖,難道是我把plugins的地址拼寫錯了,大家可以幫忙看看,如果是對的話,Chrome已經把flash禁止了,前面也有文章寫過如何在Chrome播放 RTSP 實時視訊,並且不能有外掛。今天我們在談談所有的瀏覽

C++的一些不錯開源框架可以學習和借鑑

下次造輪子前先看看現有的輪子吧 值得學習的C語言開源專案 - 1. Webbench Webbench是一個在linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL,測試網站在壓力下工作的效能,最多可以模擬3萬個併發連線去測試網

util包和sql包裡的Date類區別哪一個

java.util.Date表示特定的瞬間,精確到毫秒---------------------------------------java.sql.Date一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒

Android肝帝戰紀之基於上篇單Activity+Fragment框架開發電商式導航欄Fragment切換

電商式導航欄,多Fragment切換 介面構思示意圖 設計思路 在底部的LinearLayout中新增相應的圖示,然後設定tag繫結相應的 Fragment陣列對應的下標值,再點選切換的時候,根據獲取到的tag值,取出陣列中對應下標的Fragment,在

Fbx檔案的載入與渲染:一個DirectX11小專案開源主要來演示fbx檔案的載入與渲染

這個小專案最初是用來學習DirectX11的,後來嘗試實現一個名為GGUI的UI庫,後來嘗試fbx檔案的解析。 我有個缺點,就是淺嘗輒止。一件事,只要學會了一點皮毛,初步達到了目標,就擱置不做了。 去年初步實現了fbx檔案的載入與渲染,然後就熱情驟減,裹足不前了。 最近熱情

6款主流數字貨幣錢包測評哪個錢包看完就知道!

貝爾有話說最近有很多同學來問我,市面上錢包那麼多,哪個最安全。最好用?今天這篇文章就可以解答大家的問題了。現在市場上有很多數字貨幣錢包,為了解決大家的疑問,今天我們就給大家測評一下哪款錢包最好用。考慮到很多韭菜分不清冷熱錢包,所以這次測評,暫不進行冷熱之分。imtokenimToken是一款移動端輕錢包App

RCurl中這麼get函式是不是一直傻傻分不清!!!

杜雨,EasyCharts團隊成員,R語言中文社群專欄作者,興趣方向為:Excel商務圖表,R語

android6.0動態許可權以及如何同時授予個許可權戶禁用的後續處理

AlertDialog mPermissionDialog;/** * 不再提示許可權 時的展示對話方塊 */private void showPermissionDialog() {     if (mPermissionDialog == null) {         mPermissionDialog