小序
框架面向于一系列相同行为代码的重用,而设计则面向的是一系列相同结构代码的重用。简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。
对待框架演变的态度:所谓真理只是在特定领域条件下成立的教条理论罢了。
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:**代表一种状态。