刚刚接触编程的的人,可能会这样认为:只要代码写完了能够跑起来就算完工了。如果只是写一个小程序,“能够跑起来”这样的标准也就可以了,但是如果你是在公司进行程序的开发,那么仅仅让程序成功的跑起来是不行的,事情远没有你想的这么简单。一个商业项目的代码少则数万行,多则上百万甚至更多,这种商业项目不可能仅仅靠一个人完成,要想高效高质量的完成开发工作,就需要一个专业的开发团队了。在团队中,有人负责项目的架构设计,有些人负责程序代码的编写….要想像这样做到项目开发的分工就必须在程序的结构上做适当的安排。

  举个例子,大多数商业化软件都有不同的语言版本,这些不同语言版本的软件在功能上是完全一样的,如果我们能够把软件上的文字与程序分离开来,这样就能够很方便的发布不同语言的版本了。

  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

  现在,我们在之前的代码基础上,进行一些改动,把MVC模式应用的程序当中。

  1.新增一个setupViewCompoent()方法负责运行View相关的所用程序代码,包括取得接口布局文件中的接口组件和设置接口组件中事件处理程序。

  2.把写在程序中的字符串放在strings.xml资源文件中,定义在strings.xml资源文件中的字符串在经过编译后会放到资源类R中,然后程序再从资源类R中取得所需要的字符          串。

  3.在main.xml接口布局文件中,我们把里面的提示文字定义在strings.xml资源文件中,然后再到资源类R中取出字符串使用。代码如下:

    strings.xml资源文件:

  <resources>
   <string name="app_name">健身咨询</string>
  <string name="promptSex">性别:</string>
   <string name="promptAge">年龄:</string>
   <string name="promptBtnDoSug">健身咨询</string>
  <string name="sugResult">结果:</string>
   <string name="sugRun">跑步</string>
   <string name="sugSwim">游泳</string>
   <string name="sugSuggestion">健康咨询</string>
  <string name="sexMale">男</string>
  </resources>   main.xml文件:
  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
   android:layout_height="match_parent">   <TextView
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="@string/promptSex"/>
<EditText
   android:id="@+id/edtSex"
   android:layout_width="match_parent"
   android:layout_height="wrap_content" />
   android:text=""/>
<TextView
   android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:inputType="text"
   android:text="@string/promptAge"/>
<EditText
  android:id="@+id/edtAge"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:inputType="number"
   android:text=""/>
<Button
   android:id="@+id/btnDoSug"
  android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="@string/promptBtnDoSug"/>
<TextView
   android:id="@+id/txtResult"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="@string/sugResult"/>
</LinearLayout>


修改程序代码:
  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 MainActivity extends Activity {    private Button btnDoSug;
   private EditText edtSex, edtAge;
  private TextView txtResult;    @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   setupViewComponent();
   }    private void setupViewComponent(){
   //从资源类R中取得接口组件
   btnDoSug = (Button)findViewById(R.id.btnDoSug);
   edtSex = (EditText)findViewById(R.id.edtSex);
  edtAge = (EditText)findViewById(R.id.edtAge);
  txtResult = (TextView)findViewById(R.id.txtResult);
  //button组件事件的listener
   btnDoSug.setOnClickListener(btnDoSugOnClick);
   }    private Button.OnClickListener btnDoSugOnClick = new Button.OnClickListener(){    public void onClick(View view){
   //点击按钮后执行的代码
   String strSex = edtSex.getText().toString();
   int iAge = Integer.parseInt(edtAge.getText().toString());    String strSug = "结果:";
   if(strSex.equals("男"))
   {
   if(iAge < 28)
   strSug += getString(R.string.sugRun);
   else if(iAge > 33)
   strSug += getString(R.string.sugRun);
   else
   strSug += getString(R.string.sugRun);
   }
   else
   {
   if(iAge < 28)
   strSug += getString(R.string.sugRun);
  else if(iAge > 33)
  strSug += getString(R.string.sugSwim);
   else
   strSug += getString(R.string.sugSwim);
   }    txtResult.setText(strSug);
   }
   };
  }
 

    

Android入门(五):程序架构——MVC设计模式在Android中的应用的更多相关文章

  1. .NET 开源了,Visual Studio 开始支持 Android 和 iOS 程序编写并自带 Android 模拟器

    .NET 开源了,Visual Studio 开始支持 Android 和 iOS 程序编写并自带 Android 模拟器 北京时间今天凌晨的 Connect(); 大会上,多少程序员的假想成为现实. ...

  2. MVC设计模式在网站中的应用

    MVC设计模式在网站中的应用 以淘宝的购物车为例 一.结合六个基本质量属性 可修改性 采用MVC设计模式的时候,可以将视图.模型.控制器分析,将用户动作.数据表示.应用数据分离开来,如果用户需要以不同 ...

  3. Android开发之程序猿必需要懂得Android的重要设计理念2(5.20更新版)

    上篇文章介绍了Android开发的设计理念的一部分,并没有得到博友们的多大认可,仅仅看到了一位博友在以下留言期待下一篇文章的发表,为了这小小的唯一支持.我决定继续把后面的8个要点介绍一下,自己也潜心反 ...

  4. Android入门(五)UI-单位与尺寸、ListView

    原文链接:http://www.orlion.ga/453/ 一.单位与尺寸 布局文件中一共有以下单位供选择:px,pt,dp,sp px:是像素,屏幕中可见的最小元素单位. pt:是磅,1磅等于1/ ...

  5. MVC设计模式(持续更新中)

    MVC设计模式--->英文全称为: model(模型)  View (视图)  Controller(控制)   MVC是一种设计思想.这种思想强调实现模型(Model).视图(View)和控制 ...

  6. Android开发之程序猿必需要懂得Android的重要设计理念

         前几天去參加了带着自己的作品去參加服务外包大赛,由于签位抽到的比較靠后就等待了蛮久,就跟坐在前面的一起參赛的选手開始讨论Android的开发经验.各自给对方展示了自己的作品,小伙伴就建议我看 ...

  7. 前端之Android入门(3):MVC模式(上)

    很多Android的入门书籍,在前面介绍完布局后就会逐个介绍组件,然后开始编写组件使用的例子.每每到此时小伙伴们都可能会有些疑问:是否应该先啃完一本<Java编程思想>学点 Java 知识 ...

  8. Android入门学习:Android 系统框架及应用程序执行过程

    Android基础知识学习 新手上路,还请多多帮助.由于初学,博客内容难免有不正确的地方,还请各位多多指教,相互学习! 主要内容: 1.Android层次架构及主要功能 2.Android编程模型,程 ...

  9. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

随机推荐

  1. [java] 可视化日历的实现(基于Calendar类 )

    写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2. ...

  2. PHP系统声明式事务处理

    转自:http://www.jianshu.com/p/34261804bc45 1.数据库事务 事务(Transaction)是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行, ...

  3. tyvj1148 小船弯弯

    描述 童年的我们,充满了新奇的想法.这天,小朋友们用彩虹画笔在云霞上绘制了世界上最美丽的图画.那描绘的是一条大河波浪宽,风吹稻花香两岸的情景.欣赏着自己的作品,小朋友们别提多开心了.这时,Q小朋友对C ...

  4. 诸城模拟赛 dvd的逆序对

    [题目描述] dvd是一个爱序列的孩子. 他对序列的热爱以至于他每天都在和序列度过 但是有一个问题他却一直没能解决 给你n,k求1~n有多少排列有恰好k个逆序对 [输入格式] 一行两个整数n,k [输 ...

  5. MSYS2的源配置

    关于MSYS2的文章可以参考下面的链接,笔者不多赘述: msys2安装笔记 MSYS2 + MinGW-w64 + Git + gVim 环境配置 msys2环境搭建 msys2安装g++: pacm ...

  6. 微信小程序开发视频教程新鲜出炉

    微信小程序开发公测了,可是对于新手来说,不同的框架不同的开发机制,如何快速适应呢?微信小程序开发视频教程新鲜出炉了,从零开始一步一步搭建微信小程序,每个章节都会涉及到不同的知识点,等教程学习完你不但掌 ...

  7. getcwd()和dirname(__FILE__)的区别

    我个人理解:getcwd()会随着包含文件的改变而改变,而dirname(__FILE__)不会.即 getcwd() 表示获取当前执行文件的物理路径. 如 getcwd()显示: /www/proj ...

  8. ICP 算法

    ICP 算法是一种点云到点云的配准方法. 在SLAM中通过空间点云的配准(可以通过相机或者3D激光雷达获取点云数据),可以估计相机运动(机器人运动,旋转矩阵R与平移向量t),累积配准,并不断回环检测, ...

  9. mount img

    直接挂载img文件有时会有  mount:您必须指定文件系统类型   的错误,但加 -t ext2 等类型还是没用. 这是因为img文件包含了mbr引导导致的问题.解决方法如下: $sudo fdis ...

  10. day1

    day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...