MVC-MVP-MVVM-MVI

小序

框架面向于一系列相同行为代码的重用,而设计则面向的是一系列相同结构代码的重用。简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。

对待框架演变的态度:所谓真理只是在特定领域条件下成立的教条理论罢了。

MVC

Model-View-Controller(模型-视图-控制器)
MVC是一种框架模式而非设计模式,GOF把MVC看作是3种设计模式:观察者模式、策略模式与组合模式的合体,而且其核心在观察者模式,也就是一个基于发布/订阅者模型的框架。

经典MVC

1978年由Trygve Reenskaug在Smalltalk-80系统上首次提出。
MVC本质是分层解耦,将表现层与逻辑进行分离。

  • **Model:**Model可以是一个独立的对象,也可以是一系列对象的集合体。
  • **View:**View是Model中一些重要数据在视觉上的体现。
  • **Controller:**Controller用于连接User和System,比如当Controller接收到用户的输出时,会将其转换成合适的事件消息,并将该事件消息传递给一个或多个View。

Application Model MVC

Model2

1998年,Model2被首次提出。
Model2被应用于Web开发中,将JavaBean、JSP、Servlet对应于MVC的三个部分。Model2改进了事件流向。
User --> Controller --> Model --> Controller --> View --> User
View与Model不再有耦合,接近于MVP,不同的是MVP捕获用户交互请求的是View而不是Controller。

MVP

Model-View-Presenter(数据层-UI层-业务逻辑层)

MVVM

Model-View-ViewModel
2005年被微软的WPF和Silverlight的架构师John Gossman提出,并且应用在微软的项目开发中,前身是Martin Fowler在2004年发表的Presentation Model(PM)设计模式。

DataBinding

配置

android {
    dataBinding {
        enabled true
    }
}

布局结构

首先根节点为layout;其次,布局文件中声名所使用到的数据实体类;然后才是传统布局节点。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <!--data节点声名数据模型-->
    <data>
        <variable
            name="userModel"
            type="com.test.demo.testdemo.UserModel" />
    </data>

    <!--传统布局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="@{userModel.btnText}" />
    </LinearLayout>
</layout>

数据绑定

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    DataBindingTestBinding binding = DataBindingUtil.setContentView(this, R.layout.data_binding_test);
    UserModel model = new UserModel();
    model.setBtnText("中国");
    binding.setUserModel(model);
}

MVI

Model-View-Intent(数据层-UI层-业务逻辑层)

  • **Model:**代表一种状态。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页