前言:
以前刚接触的时候,别人都讲我们用的最基础的框架就是mvc框架,就是那种将所有的代码写在一个activity。之后,我开始接触mvp框架,并且一直使用至今,导致对mvc框架的了解越来越少。最近偶然接触,并且搜了几篇文章,才了解以前写的算是一个“随机框架”,毫无章法。
一、何为mvc框架?
首先了解mvc是由model(模型)、view(视图)、controller(控制器)组成的。百度搜索mvc的图解,更直观的帮助了解
模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“ Model ”有对数据直接访问的权力,例如对数据库的访问。“Model”不依赖“View”和“Controller”,也就是说, Model 不关心它会被如何显示或是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必须事先在此 Model 上注册,从而,View 可以了解在数据 Model 上发生的改变。
视图(View)能够实现数据有目的的显示(理论上,这不是必需的)。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
控制器(Controller)起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。
下面是我所理解的图mvc的框架图
二、为何使用mvc框架
MVC模式最早由Trygve Reenskaug在1978年提出[1],施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。
1.各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
2.有利于开发中的分工
在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
3.有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。
三、如何使用mvc框架
本人用mvc框架写了一个非常简单的demo
controller
public class LoginActivity extends BaseActivity implements LoginModel.OnLoginListener {
@BindView(R.id.main_tv)
TextView mainTv;
LoginModel mLoginInterface;
@Override
protected int getContentViewID( ) {
return R.layout.activity_main;
}
@Override
public void initView( ) {
mLoginInterface = new LoginModel();
mLoginInterface.loginByPassword(this,"1","2");
}
@Override
public void onSuccess(String tip) {
mainTv.setText(tip);
}
}
model
public class LoginModel implements LoginModelImpl {
@Override
public void loginByPassword(OnLoginListener mOnLoginListener,String phoneNumber,String password) {
mOnLoginListener.onSuccess("成功 ");
} }
//以下这个为方法的接口,便于管理将onListenter放在同一个类中
public interface LoginModelImpl {
void loginByPassword(OnLoginListener mOnLoginListener,String phoneNumber,String password);
interface OnLoginListener {
void onSuccess(String tip);
}}
view
这里我所理解的就是layout文件夹下的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
<TextView
android:id="@+id/main_tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"/>
</LinearLayout>