如何正確使用開源專案?
轉載:http://stormzhang.com/android/2016/05/08/how-to-choose-open-source-project/
如何正確的使用開源專案?
如果你是個人練手專案,那隨你心情,想怎麼用怎麼用,沒啥需要強調的注意事項,本篇文章僅是以在商業專案採用開源庫做介紹。
1. 使用成熟穩定的開源專案
現在技術日新月異,可能隔幾天就會出來一個新的開源框架,但是公司的商業專案永遠以穩為主,也許你迫不及待的想嚐鮮體驗新技術,可以在你個人業餘專案進行體驗學習,覺得各方面都使用掌握了,並且該框架已經有不少商業專案採用了,再考慮在公司的商業專案中使用。所以,給大家的建議是:公司的商業專案永遠不要以嚐鮮為主,一定要保證穩定。
2. 理解原理
如果我們在商業專案中採用了一些開源專案,前提是自己一定是理解其原理,完全掌握了才建議在商業專案使用,一些UI類的開源控制元件還好,尤其是對於一些框架類的開源專案,如網路請求庫、ORM框架、各種圖片載入庫、依賴注入框架等等,不求你掌握他具體實現的每個細節,但是一定要理解其原理,並且熟練掌握他的各種API,再考慮運用到公司的專案中。
3. 不要改原始碼
我們知道我們在使用一些開源專案的時候,不可能永遠滿足我們自己的需求,我們一般都會在其基礎上定製些我們自己的業務需求,這個時候建議大家不要改原始碼,而是在自己的專案裡對引用的開源框架進行擴充套件,如果他不可擴充套件或者說擴充套件起來很麻煩,只能說他的設計還不夠好。
為什麼不建議大家改原始碼?因為好的開源專案一般會持續維護與更新,而一旦我們更改原始碼,這意味著以後我們想要更新版本變得很麻煩。所以,不是特別必要,都強烈建議大家不要改原始碼。
4. 使用Gradle遠端依賴
對於 Android 開發來說,使用 Gradle 遠端依賴是最方便,最流行的一種方式了,一行程式碼直接搞定,如果一個開源專案不提供 Gradle 依賴的方式,只能說有點 low 了。儘量不要使用本地 jar 或者本地 aar 的方式引用,不是不可以,更新起來稍微有點麻煩,如果我們使用 Gradle 只需更改一個版本號就直接升級了,而且使用 Gradle 還可以方便的統一管理,可以見這篇文章
「Gradle依賴的統一管理」
5. 請一定要封裝一層
計算機史上有個萬能的解決方案就是,如果原有層面解決不了問題,那麼就請再加一層!
對於開源專案,我們知道有些庫設計的確實很棒,使用者呼叫起來非常方便,一行程式碼直接搞定,拿圖片載入庫 Picasso 舉個例子:
Picasso.with(context).load(imageUrl).into(imageView);
使用起來是不是特簡單?你也許問我,都封裝的這麼好了還用得著再封裝一層麼?那你錯了,哪怕他已經很完美了,我都會這麼做:
public class ImageLoader { public static void with(Context context, String imageUrl, ImageView imageView) { Picasso.with(context).load(imageUrl).into(imageView); }}
這樣我所有專案呼叫的方式直接就是 ImageLoader.with() ,這樣做的好處是:
入口統一,所有圖片載入都在這一個地方管理,一目瞭然,即使有什麼改動我也只需要改這一個類就可以了。
隨著你們業務的需求,發現 Picasso 這個圖片載入庫已經滿足不了你們了,你們需要換成 Fresco ,如果你沒有封裝一層的話,想要替換這個庫那你要崩潰了,要把所有呼叫 Picasso 的地方都改一遍,而如果你中間封裝了一層,那真的非常輕鬆,三天兩頭的換一次也沒問題。
這就是所謂的外部表現一致,內部靈活處理原則。
6. 做好應急,以防萬一
開源專案說白了是公開的,大家都可以採用,但是永遠不要完全依賴,並不是非他不可,選擇的時候最好有可替代品,這也是我為什麼不建議大家使用哪種大而全的框架級開源庫,除非他真的特別優秀,否則不要輕易使用,因為一旦他出問題了,或者說他突然宣佈某一天不開源了,那你要崩潰了,替換的代價幾乎可以重寫了。所以建議大家使用那種專注的開源框架,如只做網路庫的,只做圖片處理的,而這種大多都有替代品,一旦他出事,你還有其他別的選擇。
7. 積累自己的輪子
開源專案用的多了,你會逐漸的意識到很多開源庫基本是專案搭框架必須的,按照你自己或者你們公司的使用習慣,你應該積累出一套你們自己的專屬「輪子」,你們專案組成員熟悉的「輪子」,一旦有新的專案開始,搭一個屬於你們自己的框架分分鐘的事,會大大的提升你們的開發效率!
以上,都是我這麼多年採坑積累的寶貴經驗,分享給你們,希望對你們真的有幫助!
相關文章
- 開源專案翻譯正確姿勢
- 以正確的方式開源 Python 專案Python
- 如何正確的使用代理ip資源
- 你的專案應該如何正確分層?
- 如何正確使用 Slim 框架框架
- 專案實施中如何正確理解“ERP”(轉)
- 正確姿勢使用vue cli3建立專案Vue
- Goland 開啟一個專案的正確姿勢GoLand
- JavaPoet 開源專案使用Java
- 正確的專案推進思路
- 如何正確使用async/await?AI
- 海關資料如何正確使用
- 3 分鐘教你如何在 github 上精確的找開源專案?Github
- 以正確的方式開始一個 Django 1.4 專案Django
- Vue開源專案使用探索Vue
- 如何正確的在專案中接入微信JS-SDKJS
- 舉兩個栗子:如何正確建立個人的機器學習專案集機器學習
- 如何開始參與開源專案?
- 如何正確安全使用伺服器?伺服器
- 如何正確使用Node.js事件Node.js事件
- 如何正確使用代理伺服器伺服器
- 如何理解並正確使用 MySQL 索引MySql索引
- 乾貨!如何正確使用Git FlowGit
- 如何熟悉一個開源專案?
- 正確理解專案交付成果(Deliverable)(轉)
- SpringBoot專案中使用快取Cache的正確姿勢!!!Spring Boot快取
- 資料混亂如何正確使用CRM
- Retrofit中如何正確的使用https?HTTP
- Android-如何正確地使用HandlerAndroid
- 如何給開源專案做貢獻
- 如何高效地學習開源專案
- 如何高效的學習開源專案?
- 如何給開源專案發起提案
- 開源專案如何利用社交媒體
- 開源專案是如何被搞砸的?
- 如何研究開源專案的程式碼?
- Weex開發之正確使用iconfont
- 如何正確挑選人力資源資訊系統?