目的
架構設計的目的是通過設計使程式模塊化,做到模塊內部的高聚合和模塊之間的低耦合,提高開發效率,且能方便后續的測驗及問題定位,但是對于不同量級,不同需求的APP,適合的架構是視情況而定的,切不可硬套架構,
定義
MVC是Model View Controller的縮寫,它是指模型(model)-視圖(view)-控制器(controller)這一設計架構,其中:
-
Model(模型層):負責資料的加載和存盤
-
View(視圖層):負責界面資料的顯示,與用戶進行互動
-
Controller(控制器層):負責邏輯業務的處理
流程
目的
架構設計的目的是通過設計使程式模塊化,做到模塊內部的高聚合和模塊之間的低耦合,提高開發效率,且能方便后續的測驗及問題定位,但是對于不同量級,不同需求的APP,適合的架構是視情況而定的,切不可硬套架構,
定義
MVC是Model View Controller的縮寫,它是指模型(model)-視圖(view)-控制器(controller)這一設計架構,其中:
-
Model(模型層):負責資料的加載和存盤
-
View(視圖層):負責界面資料的顯示,與用戶進行互動
-
Controller(控制器層):負責邏輯業務的處理
流程

- View接受用戶的請求,然后將請求傳遞給Controller,
- Controller進行業務邏輯處理后,通知Model去更新,
- Model資料更新后,通知View去更新界面顯示,
Android中的MVC
Android中界面部分也采用了MVC框架:一般由Activity充當Controller,XML檔案作為View層,再加上我們抽離出的Model層,
視圖層(View)
一般采用XML檔案進行界面的描述,這些XML可以理解為AndroidApp的View,使用的時候可以非常方便的引入,且便于后期界面的修改,邏輯中與界面對應的id不變化則代碼不用修改,大大增強了代碼的可維護性,
控制層(Controller)
Android的控制層的重任通常落在了眾多的Activity的肩上,Android中的Actiivity的回應時間是5s,如果耗時的操作放在這里,程式就很容易被回收掉,所以一般不在Activity中寫耗時操作代碼,要通過Activity交割Model業務邏輯層處理,
模型層(Model)
我們針對業務模型,建立的資料結構和相關的類,就可以理解為AndroidApp的Model,Model是與View無關,而與業務相關的,對資料庫的操作、對網路等的操作都應該在Model里面處理,當然對業務計算等操作也是必須放在該層的,
各層內容

Android MVC小例子
下面來看一個簡易的demo代碼,它的功能是:點擊螢屏上的重繪按鍵后,給出應用運行的時長,
代碼
//Model層
public class TimeModel {
private static final long START_TIME = System.currentTimeMillis();
public void update(ControllerActivity controllerActivity) {
//更新資料
String timeText = Double.toString((System.currentTimeMillis() - START_TIME)/1000.0);
//更新UI
controllerActivity.setText(timeText);
}
}
<!-- View層 -->
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/tv_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="@string/time_text"/>
<Button
android:id="@+id/btn_update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/update_button"/>
</LinearLayout>
//Controller層
public class ControllerActivity extends Activity {
private TimeModel timeModel;
private TextView textView;
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_controller);
timeModel = new TimeModel();
initView();
}
public void initView() {
textView = findViewById(R.id.tv_show);
button = findViewById(R.id.btn_update);
//接收來自View的事件
button.setOnClickListener(v -> {
//通知Model處理資料
timeModel.update(ControllerActivity.this);
});
}
public void setText(String timeText){
String text = "應用已運行" + timeText + "秒";
textView.setText(text);
}
}
運行結果

缺點
上述例子中各個組件的職責似乎挺符合MVC設計理念,但在實際的開發程序中我們發現并不是這樣,
Android中作為View的XML視圖功能太弱,Activity基本上可以算作View和Controller的合體,既要負責視圖的顯示又要加入控制邏輯,造成了Controller層與View層的耦合,在Android中寫出來的MVC更加類似于View-Model 模式:

所以說,在Android開發中使用MVC架構,的確有諸多束縛,尋找更合適的設計架構,已是大勢所趨,
最后
小編學習提升時,順帶從網上收集整理了一些 Android 開發相關的學習檔案、面試題、Android 核心筆記等等檔案,希望能幫助到大家學習提升,如有需要參考的可以直接去我 CodeChina地址:https://codechina.csdn.net/u012165769/Android-T3 訪問查閱,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/292916.html
標籤:其他
上一篇:關于left join優化not in 導致的長時間查詢無資料問題 Using where; Using join buffer (Block Nested Loop)
下一篇:OpenResty安裝與使用
