【Android】淺談安卓MVC框架設計

jopen 8年前發布 | 39K 次閱讀 Android開發 移動開發

關于MVC是什么,就不多說了,找百科即可。

?一、淺談?

MVC設計模式的初衷,就是為了讓多個開發者共同開發時加快效率而設計的。

Model:只關注數據的處理,比如網絡請求,計算坐標等;

View:只關注界面的描述,資源文件的xml就是了;

Controller:把Model跟View聯動起來的關鍵,比如利用Model請求網絡,然后控制View的顯示。

舉個例子,公司的一個項目要分配給3個開發員做。

可以這樣分工:一個只做xml界面;一個只做Model;一個只做Controller

這樣分工的好處就是:

做xml的無需關注數據及界面的處理,只需做出靜態的界面描述xml即可,這樣的工作比較簡單,可以分配給新人練練手;

做Model的無需關注界面,只需要專心對接接口,以及處理數據;

做Controller的則無需關注數據,只需要用Model實例來處理數據,然后展示界面即可。

做過安卓開發的都知道,一邊寫界面一邊對接口一邊更新界面到底有多痛苦,用MVC的話就可以讓每個人只做一件相同的事,熟能生巧,越做越快。

 

二、實例架構

說了這么多,項目中到底怎么寫,還是稍微說一下自己的架構設計吧:

項目中我會這樣分包:

.mvc.controller
.mvc.model
.mvc.view

里面再根據項目分模塊,其中controller放Action類,model放Model類,view放Activity;

注意:Action類實際上就是控制器,而Activity并不算是View,在onCreate中設置的xml才是view層。

 

下面還是給代碼解釋吧:

Action:

public class LoginAction extends BaseAction implements OnClickListener{

    public LoginAction(AQuery aq) {
        super(aq);
    }

    private LoginModel model;

    @Override
    public void initModel() {
        model = new LoginModel(this);
    }

    @Override
    public void initView() {
        tm.dismissTitle();

        aq.id(R.id.btn_login).clicked(this);
        aq.id(R.id.tv_create).clicked(this);
        aq.id(R.id.tv_forgot).clicked(this);
    }

    ...

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_login://login
            model.login(0);
            break;
        case R.id.tv_create://注冊
            ActJump.load(act, RegisterActivity.class);
            break;
        case R.id.tv_forgot://忘記密碼
            ActJump.load(act, ResetPwdActivity.class);
            break;

        default:
            break;
        }
    }

}

Model:

public class LoginModel extends BaseModel{

    public LoginModel(BaseAction action) {
        super(action);
    }

    /**
     * 請求登錄
     */
    public void login(int flag){
        String name = aq.id(R.id.et_name).getText().toString();
        String pwd = aq.id(R.id.et_pwd).getText().toString();
        Map<String, String> params = new HashMap<String, String>();
        params.put("", name);
        params.put("", pwd);
        request("", params, flag);
    }

}

View:

public class LoginActivity extends BaseActivity{

    private LoginAction action;

    @Override
    public int initView() {
        return R.layout.activity_login;
    }

    @Override
    public void initAction(Bundle savedInstanceState) {
        action = new LoginAction(new AQuery(this));
        action.init(getTitleManager());
    }

}

其中R.layout.activity_login即是真正的view層。

實際上把Activity當成控制器也可以,但這樣Activity的代碼就會顯得臃腫,所以將控制器的代碼全提取到Action類中,即使以后想在原來的基礎上開發新界面,直接替換Action即可。

(上面用到的AQuery我就不解釋了吧?至于BaseAction、BaseModel、BaseActivity每個人有自己的寫法,我就不班門弄斧了)

 

三、題外話

當然,也有些人看不起MVC,覺得明明一個Activity能搞定的界面,居然要分3個類來寫,實在煩。

好吧我承認,在我剛畢業那會也是這態度,直到我被客戶逼著寫MVC之后,我就徹底愛上這個設計模式了。

一個人做項目的時候,怎么舒服怎么來,當然是最快的。但是,項目后期又不可能只有你一個人做,說不定項目加入其它開發員了呢,也說不定你哪天辭職了呢,代碼總歸是要給人看的,不用點設計模式裝B一下,怎么行呢?=w=

 

來自: http://my.oschina.net/u/816576/blog/603553

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!