欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android的mvc,Android Android

怎么看待在Android上應(yīng)用MVC框架

這個(gè)問(wèn)題,首先看你的架構(gòu),一切以基于你的系統(tǒng)結(jié)構(gòu)為依據(jù),否則就是在扯淡;

創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站營(yíng)銷推廣,域名與空間,網(wǎng)絡(luò)空間,網(wǎng)站改版維護(hù)有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問(wèn)題,請(qǐng)聯(lián)系創(chuàng)新互聯(lián)。

任何基于mvc的系統(tǒng),c是一個(gè)完整獨(dú)立的,怎么會(huì)要在activity里處理大量的業(yè)務(wù)邏輯呢?

你提這個(gè)問(wèn)題,明顯已經(jīng)進(jìn)入一個(gè)誤區(qū)了。

嚴(yán)格來(lái)講在android,activity和intent起到了controller的角色,所以很明顯業(yè)務(wù)邏輯不應(yīng)該放在activity里。

放在系統(tǒng)結(jié)構(gòu)來(lái)看,controller肯定你要單獨(dú)自己抽出來(lái),而不是都放在一個(gè)activity里,除非你的項(xiàng)目就一個(gè)activity,即使項(xiàng)目很簡(jiǎn)單我也建議你抽出單獨(dú)的controller。

安卓mvc是model,view,controller的縮寫(xiě),mvc包含三個(gè)部分:

l模型(model)對(duì)象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫(xiě)在該層。

l視圖(view)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。

l控制器(control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對(duì)象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相關(guān)事件,交給m哦得了處理。

Android-MVC架構(gòu)模式

MVC的架構(gòu)模式是在開(kāi)發(fā)中最常用到的,下面分享一下我對(duì)MVC架構(gòu)模式的理解。

MVC全稱是Model View Controller。

在實(shí)際開(kāi)發(fā)中, Model 層就是 JavaBean 實(shí)體類,用于保存實(shí)例數(shù)據(jù);View 層其實(shí)就是程序的 UI 界面,用于向用戶展示數(shù)據(jù)以及接收用戶的輸入;Controller 控制器用于更新 UI 界面和數(shù)據(jù)實(shí)例。

用MVC架構(gòu)模式實(shí)現(xiàn)登錄有關(guān)的案例:

這個(gè)是個(gè)人習(xí)慣,我一般是使用小刀注解和支持Java8。

這是最簡(jiǎn)單的MVC案例,希望對(duì)想要了解的MVC的小伙伴有幫助。

MVC 模式的原理,它在 Android 中是如何運(yùn)用的?

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫(xiě),一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫(xiě)業(yè)務(wù)邏輯。其中M層處理數(shù)據(jù),業(yè)務(wù)邏輯等;V層處理界面的顯示結(jié)果;C層起到橋梁的作用,來(lái)控制V層和M層通信以此來(lái)達(dá)到分離視圖顯示和業(yè)務(wù)邏輯層。

在Android開(kāi)發(fā)中,比較流行的開(kāi)發(fā)框架模式采用的是MVC框架模式,采用MVC模式的好處是便于UI界面部分的顯示和業(yè)務(wù)邏輯,數(shù)據(jù)處理分開(kāi)。那么Android項(xiàng)目中哪些代碼來(lái)充當(dāng)M,V,C角色呢?

M層:適合做一些業(yè)務(wù)邏輯處理,比如數(shù)據(jù)庫(kù)存取操作,網(wǎng)絡(luò)操作,復(fù)雜的算法,耗時(shí)的任務(wù)等都在model層處理。這個(gè)和JavaEE不太一樣,javaee中model層一般只有模型,而復(fù)雜的操作一般放在業(yè)務(wù)(service)層中。

V層:應(yīng)用層中處理數(shù)據(jù)顯示的部分,XML布局可以視為V層,顯示Model層的數(shù)據(jù)結(jié)果。

C層:在Android中,Activity處理用戶交互問(wèn)題,因此可以認(rèn)為Activity是控制器,Activity讀取V視圖層的數(shù)據(jù)(eg.讀取當(dāng)前EditText控件的數(shù)據(jù)),控制用戶輸入(eg.EditText控件數(shù)據(jù)的輸入),并向Model發(fā)送數(shù)據(jù)請(qǐng)求(eg.發(fā)起網(wǎng)絡(luò)請(qǐng)求等)。

android中如何實(shí)現(xiàn)mvc

用MVC進(jìn)行重構(gòu),例:

Step1:抽取所有界面元件的聲明和定義,整合到單獨(dú)一個(gè)函數(shù)findViews()中;

// 聲明

private Button button_calc;

private EditText field_height;

private EditText field_weight;

private TextView view_result;

private TextView view_suggest;

// 定義

private void findViews() {

button_calc = (Button) findViewById(R.id.submit);

field_height = (EditText) findViewById(R.id.height);

field_weight = (EditText) findViewById(R.id.weight);

view_result = (TextView) findViewById(R.id.result);

view_suggest = (TextView) findViewById(R.id.suggest);

}

此部分即是MVC中的V:View視圖。

Step2:抽取程序的邏輯(即界面元件的處理邏輯),整合到函數(shù)setListensers()中;

//Listen for button clicks

private void setListensers() {

button_calc.setOnClickListener(calcBMI);

}

此部分即是MVC中的C:Controller控制器。

接著,onCreate()就顯得非常簡(jiǎn)潔、明了了:

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews();

setListensers();

}

Step3:修改按鈕監(jiān)聽(tīng)器calcBMI中相應(yīng)的部分(主要是變量已經(jīng)在視圖部分定義了);

private OnClickListener calcBMI = new OnClickListener() {

@Override

public void onClick(View v) {

DecimalFormat nf = new DecimalFormat("0.00");

double height = Double.parseDouble(field_height.getText().toString()) / 100;

double weight = Double.parseDouble(field_weight.getText().toString());

double BMI = weight / (height * height);

// Present result

view_result.setText("Your BMI is " + nf.format(BMI));

// Give health advice

if (BMI 25) {

view_suggest.setText(R.string.advice_heavy);

} else if (BMI 20) {

view_suggest.setText(R.string.advice_light);

} else {

view_suggest.setText(R.string.advice_average);

}

}

};

Step4:修剪一下“細(xì)枝末節(jié)”;

1) calcBMI的修改:

private OnClickListener calcBMI = new OnClickListener() {

……

}

改成如下:

private Button.OnClickListener calcBMI = new Button.OnClickListener() {

……

}

gasolin的解釋是:

同樣是「calcBMI」 函式,在完整程式中,改將「calcBMI」 函式從原本的「OnClickListener」宣告成 「Button.OnClickListener」。這個(gè)改變有什麼差別呢?

閱讀原本的程式碼,在匯入(import)的部分可以看到,「OnClickListener」是來(lái)自於「android.view.View.OnClickListener」函式:

import android.view.View.OnClickListener;

改成 「Button.OnClickListener」後,「Button.OnClickListener」就變成來(lái)自於「android.widget.Button」中的「OnClickListener」函式,在查閱程式時(shí),整個(gè)「Button」與「OnClickListener」之間的關(guān)系變得更清晰。

2) 字符串統(tǒng)一引用XML中的描述符:

//Present result

view_result.setText("Your BMI is " + nf.format(BMI));

改成如下:

//Present result

view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

總之,此重構(gòu)的目的無(wú)非是使程序的脈絡(luò)更加清晰,即讓人一眼望去,就能很容易地分辨出界面(View)應(yīng)該寫(xiě)在哪里,程序邏輯(Controller)應(yīng)該寫(xiě)在哪里,最終使維護(hù)和擴(kuò)展代碼變得更加容易!

重構(gòu)前的代碼Bmi.java:

package com.demo.android.bmi;

import java.text.DecimalFormat;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class Bmi extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Listen for button clicks

Button button = (Button) findViewById(R.id.submit);

button.setOnClickListener(calcBMI);

}

private OnClickListener calcBMI = new OnClickListener() {

@Override

public void onClick(View v) {

DecimalFormat nf = new DecimalFormat("0.00");

EditText fieldheight = (EditText) findViewById(R.id.height);

EditText fieldweight = (EditText) findViewById(R.id.weight);

double height = Double.parseDouble(fieldheight.getText().toString()) / 100;

double weight = Double.parseDouble(fieldweight.getText().toString());

double BMI = weight / (height * height);

TextView result = (TextView) findViewById(R.id.result);

result.setText("Your BMI is " + nf.format(BMI));

// Give health advice

TextView fieldsuggest = (TextView) findViewById(R.id.suggest);

if (BMI 25) {

fieldsuggest.setText(R.string.advice_heavy);

} else if (BMI 20) {

fieldsuggest.setText(R.string.advice_light);

} else {

fieldsuggest.setText(R.string.advice_average);

}

}

};

}

2) 重構(gòu)后的代碼Bmi.java:

package com.demo.android.bmi;

import java.text.DecimalFormat;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class Bmi extends Activity {

private Button button_calc;

private EditText field_height;

private EditText field_weight;

private TextView view_result;

private TextView view_suggest;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews();

setListensers();

}

// 定義

private void findViews() {

button_calc = (Button) findViewById(R.id.submit);

field_height = (EditText) findViewById(R.id.height);

field_weight = (EditText) findViewById(R.id.weight);

view_result = (TextView) findViewById(R.id.result);

view_suggest = (TextView) findViewById(R.id.suggest);

}

// Listen for button clicks

private void setListeners() {

calcbutton.setOnClickListener(calcBMI);

}

private Button.OnClickListener calcBMI = new Button.OnClickListener() {

public void onClick(View v) {

DecimalFormat nf = new DecimalFormat("0.0");

double height = Double.parseDouble(field_height.getText().toString()) / 100;

double weight = Double.parseDouble(field_weight.getText().toString());

double BMI = weight / (height * height);

// Present result

view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

// Give health advice

if (BMI 25) {

view_suggest.setText(R.string.advice_heavy);

} else if (BMI 20) {

view_suggest.setText(R.string.advice_light);

} else {

view_suggest.setText(R.string.advice_average);

}

}

};

}

Android 中 MVC、MVP 和 MVVM 對(duì)比

MVC、MVP和MVVM是常見(jiàn)的三種架構(gòu)設(shè)計(jì)模式,當(dāng)前MVP和MVVM的使用相對(duì)比較廣泛,當(dāng)然MVC也并沒(méi)有過(guò)時(shí)之說(shuō)。

MVC (Model-View-Controller, 模型-視圖-控制器),標(biāo)準(zhǔn)的MVC是這個(gè)樣子的:

簡(jiǎn)述:

缺點(diǎn):

MVP (Model-View-Presenter) 是MVC的演化版本,幾個(gè)主要部分如下:

簡(jiǎn)述:

解釋:

優(yōu)點(diǎn):

缺點(diǎn):

MVVM 是 Model-View-ViewModel 的簡(jiǎn)寫(xiě)。和 MVP 模式相比,MVVM 模式用 ViewModel 替換了 Presenter ,其他層基本上與 MVP 模式一致,ViewModel 可以理解成 是 View 的數(shù)據(jù)模型和 Presenter 的合體。MVVM 就是將其中的 View 的狀態(tài)和行為抽象化,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開(kāi)。

簡(jiǎn)述:

缺點(diǎn):

參考:

本文名稱:android的mvc,Android Android
分享網(wǎng)址:http://chinadenli.net/article2/dsgseoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站動(dòng)態(tài)網(wǎng)站App設(shè)計(jì)品牌網(wǎng)站制作商城網(wǎng)站網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化