王学岗app设计框架:mvc框架
来源:互联网 发布:windows arp命令事例 编辑:程序博客网 时间:2024/06/05 02:30
本文目的:对app设计架构有一个初步的了解;
**为什么需要架构设计(代码在10万行以上)
1,使我们的程序模块化(分工协同开发的需要),模块内部的高内聚和模块之间的低耦合;
2,提高开发效率,后期的测试以及定位会变得更容易
**android中MVC设计架构
1,android中的设计架构都是来源于javaweb当中一些思想和模式
2,android中界面部分就是采用当前比较流行的MVC架构!
V:视图层
进行数据的展示;xml文件,可以理解为app中的View;
C:控制层:contorller
android中的控制层就是Activity;在改层可以绑定数据,获取控件,业务逻辑;android中的activity的相应时间是5秒;如果耗时操作放在这里程序就容易被回收掉
M:模型层model
主要是针对业务模型;建立数据结构和相关的类;与View无关但与业务有关
对数据库的操作,对网络的操作都应该放在model层。android中的mvc注重的是model的复用!
下面写一个例子,我们看看MVC的优缺点
我们先看下包和类的结构
我们看下视图层:
视图层比较简单,只有一个按钮和三个TextView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <Button android:id="@+id/get_user" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="得到用户信息" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
在看下Controller层,就是我们的MainActivity
package com.controller.gang;import android.app.Activity;import android.app.ProgressDialog;import android.os.Bundle;import android.os.Handler;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.example.jiagou.R;import com.model.gang.IGetUser;import com.model.gang.OnUserInfoListenner;import com.model.gang.User;import com.model.gang.impl.GetUserInfoImp;//Activity(控制层)需要做的事情//1,获取控件//2,处理事件//3,获取数据//4,控件绑定数据public class MainActivity extends Activity { private IGetUser mIGetUser; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取控件 setContentView(R.layout.activity_main); tv_name = (TextView) findViewById(R.id.tv_name); tv_age = (TextView) findViewById(R.id.tv_age); tv_sex = (TextView) findViewById(R.id.tv_sex); btn = (Button) findViewById(R.id.get_user); // 获取数据 mIGetUser = new GetUserInfoImp(); // 获取数据是耗时操作,使用进度条 ProgressDialog pd = new ProgressDialog(this); pd.setMessage("正在加载"); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getUserInfoImp(1); } }); } protected void getUserInfoImp(int i) { // 将数据与控件进行绑定 // 获取数据要从model层拿 // 该方法为耗时操作,不能直接赋值 mIGetUser.getUserInfo(i, new OnUserInfoListenner() { @Override public void getUusrInfoSuccess(final User user) { mHandler.post(new Runnable() { @Override public void run() { tv_name.setText(user.getName()); tv_sex.setText(user.getSex()); tv_age.setText(String.valueOf(user.getAge())); } }); } @Override public void getUusrInfoFail() { mHandler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "获取信息失败", Toast.LENGTH_SHORT).show(); } }); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private Handler mHandler = new Handler(); private TextView tv_name; private TextView tv_age; private TextView tv_sex; private Button btn;}
Model层类比较多,一个类一个类的贴
package com.model.gang;//获取数据的接口 ,方便获取数据public interface IGetUser { void getUserInfo(int id,OnUserInfoListenner listenner);}
package com.model.gang;//public interface OnUserInfoListenner {//回调方法 void getUusrInfoSuccess(User user); void getUusrInfoFail();}
package com.model.gang;public class User { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }private int id; public int getId() { return id;}public void setId(int id) { this.id = id;} private int age;}
package com.model.gang.impl;import com.model.gang.IGetUser;import com.model.gang.OnUserInfoListenner;import com.model.gang.User;//获取数据,获取数据是在model层// 可以在网络,数据库,服务器,文件等获取数据public class GetUserInfoImp implements IGetUser { @Override public void getUserInfo(final int id, final OnUserInfoListenner listenner) { // 模拟子线程耗时操作 new Thread() { public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (id == 1) { User user = new User(); user.setName("葛柳君"); user.setAge(18); user.setSex("动物"); // 谁实现了该监听谁就得到了这个数据 listenner.getUusrInfoSuccess(user); } else { listenner.getUusrInfoFail(); } } }.start(); }}
以上就是我们的mvc架构;但这个架构也有缺点;在Activity中既要进行获取控件,又要获取数据,还要绑定数据,还要处理事件;Activity承担了太多的逻辑,违背了面向对象的单一职能原则;
- 王学岗app设计框架:mvc框架
- MVC 设计框架
- MVC设计框架
- 框架设计模式mvc
- MVC框架设计
- mvc框架设计搭建
- MVC框架设计简介
- MVC框架设计(一)
- MVC框架设计(二)
- MVC框架设计(三)
- MVC框架设计(四)
- MVC框架设计(五)
- php MVC设计框架
- APP 基本框架设计
- iOS MVVM 框架设计 和 MVC 框架
- struts2 mvc框架设计模式
- laravel框架之MVC设计
- MVC 框架与设计模式
- 判断二叉树是不是平衡二叉树
- 如何在本地环境配置github
- Java编码
- 斐波那契数列通项公式
- Github的学习使用
- 王学岗app设计框架:mvc框架
- 生产者/消费者模式
- LoRa组网案例1:温度采集,主动上报
- .html(),.text()和.val()的差异总结
- Android RecyclerView 自动加载更多
- Go编程入门教程
- https ssl证书的工作原理及使用相关知识收集
- 双色球开奖啦~~~
- HYSBZ 1067 RMQ