189 8069 5689

android与mvc,在android

怎么看待在Android上应用MVC框架

这个问题,首先看你的架构,一切以基于你的系统结构为依据,否则就是在扯淡;

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、网络空间、营销软件、网站建设、潍城网站维护、网站推广。

任何基于mvc的系统,c是一个完整独立的,怎么会要在activity里处理大量的业务逻辑呢?

你提这个问题,明显已经进入一个误区了。

严格来讲在android,activity和intent起到了controller的角色,所以很明显业务逻辑不应该放在activity里。

放在系统结构来看,controller肯定你要单独自己抽出来,而不是都放在一个activity里,除非你的项目就一个activity,即使项目很简单我也建议你抽出单独的controller。

Android-MVC架构模式

MVC的架构模式是在开发中最常用到的,下面分享一下我对MVC架构模式的理解。

MVC全称是Model View Controller。

在实际开发中, Model 层就是 JavaBean 实体类,用于保存实例数据;View 层其实就是程序的 UI 界面,用于向用户展示数据以及接收用户的输入;Controller 控制器用于更新 UI 界面和数据实例。

用MVC架构模式实现登录有关的案例:

这个是个人习惯,我一般是使用小刀注解和支持Java8。

这是最简单的MVC案例,希望对想要了解的MVC的小伙伴有帮助。

MVC 模式的原理,它在 Android 中是如何运用的?

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。

在Android开发中,比较流行的开发框架模式采用的是MVC框架模式,采用MVC模式的好处是便于UI界面部分的显示和业务逻辑,数据处理分开。那么Android项目中哪些代码来充当M,V,C角色呢?

M层:适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。这个和JavaEE不太一样,javaee中model层一般只有模型,而复杂的操作一般放在业务(service)层中。

V层:应用层中处理数据显示的部分,XML布局可以视为V层,显示Model层的数据结果。

C层:在Android中,Activity处理用户交互问题,因此可以认为Activity是控制器,Activity读取V视图层的数据(eg.读取当前EditText控件的数据),控制用户输入(eg.EditText控件数据的输入),并向Model发送数据请求(eg.发起网络请求等)。

Android 中 MVC、MVP 和 MVVM 对比

MVC、MVP和MVVM是常见的三种架构设计模式,当前MVP和MVVM的使用相对比较广泛,当然MVC也并没有过时之说。

MVC (Model-View-Controller, 模型-视图-控制器),标准的MVC是这个样子的:

简述:

缺点:

MVP (Model-View-Presenter) 是MVC的演化版本,几个主要部分如下:

简述:

解释:

优点:

缺点:

MVVM 是 Model-View-ViewModel 的简写。和 MVP 模式相比,MVVM 模式用 ViewModel 替换了 Presenter ,其他层基本上与 MVP 模式一致,ViewModel 可以理解成 是 View 的数据模型和 Presenter 的合体。MVVM 就是将其中的 View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。

简述:

缺点:

参考:

android中如何实现mvc

用MVC进行重构,例:

Step1:抽取所有界面元件的声明和定义,整合到单独一个函数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:抽取程序的逻辑(即界面元件的处理逻辑),整合到函数setListensers()中;

//Listen for button clicks

private void setListensers() {

button_calc.setOnClickListener(calcBMI);

}

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

接着,onCreate()就显得非常简洁、明了了:

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews();

setListensers();

}

Step3:修改按钮监听器calcBMI中相应的部分(主要是变量已经在视图部分定义了);

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:修剪一下“细枝末节”;

1) calcBMI的修改:

private OnClickListener calcBMI = new OnClickListener() {

……

}

改成如下:

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

……

}

gasolin的解释是:

同样是「calcBMI」 函式,在完整程式中,改将「calcBMI」 函式从原本的「OnClickListener」宣告成 「Button.OnClickListener」。这个改变有什麼差别呢?

阅读原本的程式码,在汇入(import)的部分可以看到,「OnClickListener」是来自於「android.view.View.OnClickListener」函式:

import android.view.View.OnClickListener;

改成 「Button.OnClickListener」後,「Button.OnClickListener」就变成来自於「android.widget.Button」中的「OnClickListener」函式,在查阅程式时,整个「Button」与「OnClickListener」之间的关系变得更清晰。

2) 字符串统一引用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));

总之,此重构的目的无非是使程序的脉络更加清晰,即让人一眼望去,就能很容易地分辨出界面(View)应该写在哪里,程序逻辑(Controller)应该写在哪里,最终使维护和扩展代码变得更加容易!

重构前的代码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) 重构后的代码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,在android
浏览路径:http://cdxtjz.cn/article/dsdpidh.html

其他资讯