鍍金池/ 教程/ Android/ 面向?qū)ο罅笤瓌t(SOLID+)
Launch mode 和 Intent flags專題
Canvas & Drawables
UTAustinX_UT.9.01x: Effective Thinking Through Mathematics
《JavaScript 語言精粹》
Memory leak專題
React基礎(chǔ)
《Test Driven Development: By Example》一書
Developer tools
安卓開發(fā)技能樹
<a rel="nofollow" href="https://mp.weixin.qq.com/s?__biz=MzA3NDM
Best Practices for Interaction and Engagement
各個(gè)安卓版本引入的主要新特性
Building Apps with Connectivity &amp; the Cloud
List.toArray()再強(qiáng)轉(zhuǎn)是一定會失敗的
深入Android frameworks
Google dev 100 days系列視頻
Building Apps with Contacts &amp; Sign-In
關(guān)系型數(shù)據(jù)庫設(shè)計(jì)范式
《App研發(fā)錄》一書
REST API設(shè)計(jì)
Google IO 2015摘要
自定義View/ViewGroup以及高性能實(shí)現(xiàn)自定義UI
安卓系統(tǒng)點(diǎn)擊事件處理
《50 Android Hacks》一書
Building Apps with Content Sharing
Flux基礎(chǔ)
<a rel="nofollow" href="http://developer.android.com/training/in
依賴注入(以Dagger 2為例)
Java同步機(jī)制
Java對象內(nèi)存的使用情況
JSR133(Java memory model)
Google官方Material Design手冊(<a rel="nofollow" href="http://develop
Futurice公司安卓團(tuán)隊(duì)的建議
安卓性能優(yōu)化
  • 1.
Best Practices for Performance
<a rel="nofollow" href="http://www.vogella.com/tutorials/Android
<a rel="nofollow" href="http://blog.danlew.net/2014/11/19/styles
Handling Runtime Changes
<a rel="nofollow" href="http://www.vogella.com/tutorials/Android
Building Apps with Graphics &amp; Animation
<a rel="nofollow" href="http://tools.android.com/tech-docs/new-b
Android項(xiàng)目架構(gòu)
MVP(Model-View-Presenter)模式
<a rel="nofollow" href="http://www.infoq.com/cn/es6-in-depth/"">
《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》一書
Rx在Android中的最佳實(shí)踐
函數(shù)調(diào)用時(shí),傳遞參數(shù)應(yīng)該是不可變的(Immutable)
ProGuard
面向?qū)ο罅笤瓌t(SOLID+)
深入理解Java虛擬機(jī)
深入Java深淺拷貝、immutable、unmodifiable
Best Practices for User Input
UI上的一些高效方式/最佳實(shí)踐
<a rel="nofollow" href="https://blog.stylingandroid.com/ripples-
Best Practices for User Interface
安卓測試驅(qū)動開發(fā)/安卓測試驗(yàn)證
暗時(shí)間:學(xué)會正確思考
技術(shù)筆記
Aspect Oriented Programming(AOP)
Best Practices for Background Jobs
安卓系統(tǒng)動效專題
Feed系統(tǒng)的設(shè)計(jì)
Data binding(MVVM,Model-View-ViewModel)
Effective Java一書筆記
<a rel="nofollow" href="http://developer.android.com/training/in
Rx (Reactive eXtention)
MultiDex專題
一些很棒的點(diǎn)子
WebRTC

面向?qū)ο罅笤瓌t(SOLID+)

基本概念

功能:比如一個(gè)ImageLoader,負(fù)責(zé)實(shí)現(xiàn)圖片加載,但是要支持緩存;那么這個(gè)ImageLoader就是我們討論的功能;

依賴:上述ImageLoader功能,需要支持緩存,但是緩存其實(shí)也是一個(gè)很大的功能,而且會有多種策略,那么ImageLoader就不應(yīng)該把緩存功能緊耦合,而是作為一個(gè)外部的依賴;

使用者:上述ImageLoader作為一個(gè)功能,可以打包成一個(gè)庫,那么用這個(gè)庫的APP就是使用者;

使用者的需求是經(jīng)常變化的,因?yàn)樗麄兊臉I(yè)務(wù)會隨著迭代而不斷調(diào)整,那么ImageLoader這個(gè)功能好的實(shí)現(xiàn)就是無論使用者的需求怎么變化,都無需改變ImageLoader這一功能的實(shí)現(xiàn)。但是對于緩存這一核心特性,也應(yīng)該做到按需定制,而無需改變ImageLoader的實(shí)現(xiàn)代碼;

單一職責(zé)原則(S)

非常直觀的,一個(gè)類越簡單,就越難有bug,50行代碼基本不可能有bug,即便出了bug,也很容易分析出來,甚至都不用調(diào)試。

所以,盡可能的拆分,盡可能地簡化一個(gè)類的職責(zé),并且聚焦于這個(gè)單一的職責(zé)。一個(gè)類只聚焦于自己的職責(zé)時(shí),需要修改一個(gè)功能,那么被修改的類也就會盡可能的少了。

開閉原則(O)

抽象來說,就是“對擴(kuò)展開放,對修改封閉”。具體點(diǎn),就是功能的修改、增加,盡可能通過增加新的類(擴(kuò)展)來實(shí)現(xiàn),而不是修改已有的類。

但是如何達(dá)到這個(gè)效果?就是盡量把可能會變動的地方抽象出來,使用接口進(jìn)行依賴,具體的實(shí)現(xiàn)通過依賴注入來耦合。這樣,修改功能就是增加新的實(shí)現(xiàn),在使用者的代碼里面注入新的實(shí)現(xiàn)。使用者的需求變了,代碼的修改是不可避免的,但是功能的框架,如果能不修改,那就降低了引入bug的可能性。

里氏替換原則(L)

所有引用基類的地方必須能透明地使用其子類的對象。滿足此條件時(shí),對依賴的聲明(成員、參數(shù))都通過抽象基類來完成,則使用新的實(shí)現(xiàn)類時(shí),只需替換注入/傳遞的參數(shù)即可,功能實(shí)現(xiàn)無需改變。更進(jìn)一步,使用接口聲明依賴,能一定程度上避免繼承引入的問題。

接口隔離原則(I)

客戶端不應(yīng)該依賴它不需要的接口;一個(gè)類對另一個(gè)類的依賴應(yīng)該建立在最小的接口上。根據(jù)接口隔離原則,當(dāng)一個(gè)接口太大時(shí),我們需要將它分割成一些更細(xì)小的接口,使用該接口的客戶端僅需知道與之相關(guān)的方法即可,可以達(dá)到屏蔽其他接口可見性的效果。

依賴倒置原則(D)

模塊間的依賴通過抽象發(fā)生,抽象即抽象類或者接口;使用接口更佳,而且接口內(nèi)不要定義任何數(shù)據(jù);

迪米特法則(最小知識原則)

一個(gè)類應(yīng)該對自己依賴(使用)的其他類知道得最少,所謂知道,就是使用??梢灶惐冉涌诟綦x原則,依賴盡可能少的接口,每個(gè)接口又僅僅包含確實(shí)和自己的功能相關(guān)的方法。