MVP+Retrofit+RxJava+Okhttp構造一個合格的Android架構
寫在前面
現在的Android開發需求,是一個快速開發的模式,大部分App都是便捷開發,項目要求1,2個月内就要出來,造成開發者對App本身結構穩定性,層次分明,可拓展性,解耦考慮不全。不過這也是目前市場的一個普遍現象了啦。除了大公司使用者量很大的那些App必須考慮這些問題以外,因為本來Android就是一個重量級語言,本身就是一個mvc的開發模式,是以其它小型公司倒不至于去考濾一個穩定的架構問題。但是随着公司的壯大,使用者量的增多,不得不重構設計一個穩定易拓展的架構。
别的不多說,有點忙,先不寫實作思路了,先上項目位址,其實代碼裡面我的注釋都很清楚的!
https://github.com/KellenHu/MvpRxRetrofit
本架構是利用目前次新的Android技術組合而成,架構内部大緻實作了如下功能,作用:
- 利用Mvp系統架構設計模式使得層次分明
- 結構的分層使得代碼本身從架構層面降低了耦合性
- 可拓展
- 快速疊代
- 業務邏輯和UI邏輯徹底隔離
- API實作配置化管理
- Logcat配置化管理
- Rxjava鍊式調用使代碼更簡潔易讀
- 結合Retrofit從配置層面實作斷網環境下的資料緩存與讀取
- Glide加載圖檔,這是谷歌官方推薦的圖檔加載工具
- 引入道友的PhotoView,圖檔縮放,大圖檢視
- 工具子產品中預置了一些常用的工具
本架構的源碼會在文章最後放出來,但是希望道友還是不要直接下源碼,先把本文實作思路浏覽一遍,這樣了解源碼的結構更容易。
開始動手
基礎mvp架構命名為mvp_base_frame
ok,基礎層面的mvp架構“檔案夾”建立完成,接下來看我在裡面搞些什麼(别亂想,我是往裡建立class)
既然是mvp,建立m(model),v(view),p(presenter)
- 包建好之後,填東西了哦。首先model
首先,建立一個Imodel 類型是interface,至于為啥是interface,不可能你一個項目的最底層你會用class吧,不管是從解耦還是軟體設計角度來想,我就不多解釋了
- view
view層是針對視圖設計的一個基類,具體看我代碼
- presenter(關于這個單詞的意思一直有很多不同的了解,有些人從字面上了解為主持人,說得過去,有些人了解成代理,也說得過去,總之,智者見智吧,不過多糾結)
在Android領域,說白了就是activity和fragment這兩種視窗,什麼popwindow,dialog,toast這些不在範圍内,我這裡搞個基礎的,隻為activity和fragment設計代理
上圖上圖
上兩個重要的檔案源碼吧,多的還是源碼觀摩
這裡寫代碼片
快捷鍵
- 加粗
Ctrl + B
- 斜體
Ctrl + I
- 引用
Ctrl + Q
- 插傳入連結接
Ctrl + L
- 插入代碼
Ctrl + K
- 插入圖檔
Ctrl + G
- 提升标題
Ctrl + H
- 有序清單
Ctrl + O
- 無序清單
Ctrl + U
- 橫線
Ctrl + R
- 撤銷
Ctrl + Z
- 重做
Ctrl + Y
Markdown及擴充
Markdown 是一種輕量級标記語言,它允許人們使用易讀易寫的純文字格式編寫文檔,然後轉換成格式豐富的HTML頁面。 —— [ 維基百科 ]
使用簡單的符号辨別不同的标題,将某些文字标記為粗體或者斜體,建立一個連結等,詳細文法參考幫助?。
本編輯器支援 Markdown Extra , 擴充了很多好用的功能。具體請參考Github.
表格
Markdown Extra 表格文法:
項目 | 價格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号來定義對齊方式:
項目 | 價格 | 數量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定義清單
- Markdown Extra 定義清單文法: 項目1 項目2
- 定義 A
- 定義 B 項目3
- 定義 C
- 定義 D
定義D内容
代碼塊
代碼塊文法遵循标準markdown代碼,例如:
@requires_authorization
def somefunc(param1='', param2=):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + ) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
腳注
生成一個腳注1.
目錄
用
[TOC]
來生成目錄:
- MVPRetrofitRxJavaOkhttp構造一個合格的Android架構
- 寫在前面
- 開始動手
- 基礎mvp架構命名為mvp_base_frame
- 快捷鍵
- Markdown及擴充
- 表格
- 定義清單
- 代碼塊
- 腳注
- 目錄
- 數學公式
- UML 圖
- 離線寫部落格
- 浏覽器相容
數學公式
使用MathJax渲染LaTex 數學公式,詳見math.stackexchange.com.
- 行内公式,數學公式為: Γ(n)=(n−1)!∀n∈N 。
- 塊級公式:
x=−b±b2−4ac−−−−−−−√2a
更多LaTex文法請參考 這兒.
UML 圖:
可以渲染序列圖:
或者流程圖:
- 關于 序列圖 文法,參考 這兒,
- 關于 流程圖 文法,參考 這兒.
離線寫部落格
即使使用者在沒有網絡的情況下,也可以通過本編輯器離線寫部落格(直接在曾經使用過的浏覽器中輸入write.blog.csdn.net/mdeditor即可。Markdown編輯器使用浏覽器離線存儲将内容儲存在本地。
使用者寫部落格的過程中,内容實時儲存在浏覽器緩存中,在使用者關閉浏覽器或者其它異常情況下,内容不會丢失。使用者再次打開浏覽器時,會顯示上次使用者正在編輯的沒有發表的内容。
部落格發表後,本地緩存将被删除。
使用者可以選擇 把正在寫的部落格儲存到伺服器草稿箱,即使換浏覽器或者清除緩存,内容也不會丢失。
注意:雖然浏覽器存儲大部分時候都比較可靠,但為了您的資料安全,在聯網後,請務必及時發表或者儲存到伺服器草稿箱。
浏覽器相容
- 目前,本編輯器對Chrome浏覽器支援最為完整。建議大家使用較新版本的Chrome。
- IE9以下不支援
- IE9,10,11存在以下問題
- 不支援離線功能
- IE9不支援檔案導入導出
- IE10不支援拖拽檔案導入
- 這裡是 腳注 的 内容. ↩