實現MVC基礎框架

b10l07發表於2018-09-11

實現MVC基礎框架
實現MVP基礎框架(一)
Android Retrofit 2 + Retrofit 2 封裝(二)
實現Retrofit2.0 + RxJava2.0 + MVP框架(三)
Model-View-Controller
Model:主要負責網路請求、資料庫等其它I/O操作
View:主要包括XML佈局檔案(功能較弱)
Controller:負責 MVC 整個流程的排程、協作。由於XML檢視處理能力較弱,需要 Activity 或者 Fragment 承擔部分檢視層工作
優點:層次劃分更加清晰
缺點:Activity 同時承擔了 Controller 和 View 層的職責,帶來了耦合的問題,隨著業務量的增加必然會導致 Activity 變的臃腫起來,增加維護成本。

View檢視層在Layout資料夾下建立XML檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="100dp"
        android:text="@string/tv_name1"
        android:textColor="#000000"
        android:textSize="18dp" />

    <Button
        android:id="@+id/tv_but"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="100dp"
        android:text="@string/tv_but"
        android:textColor="#000000"
        android:textSize="18dp" />
</LinearLayout>

Model資料層strings.xml檔案資料

<resources>
    <string name="app_name">MVCFrame</string>
    <string name="tv_name1">張三</string>
    <string name="tv_name2">李四</string>
    <string name="tv_but">更新</string>
</resources>

Controller控制層實現

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView tv_name;
    private Button tv_but;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_name = findViewById(R.id.tv_name);
        tv_but = findViewById(R.id.tv_but);
        tv_but.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tv_but:
                tv_name.setText(R.string.tv_name2);
                break;
        }
    }
}

相關文章