android 架构学习笔记

初识 android 架构

工作了一年多,做的主要是功能上的开发,一直对 android 的架构设计上抱有好奇心。最近之前带我的开发大哥慢慢转变了方向,我也需要尽快学习 android 架构设计,在这里我会持续的分享一些自己学习或者使用的心得,欢迎大家提出宝贵的建议并一同讨论!

MVC 架构:表现层分离

MVC 的分层和职责

MVC 即 Model-View-Controller,是一种经典的三层软件体系架构,在此架构下,软件的 UI/UX 界面会和逻辑层分离,从而提高代码的可读性与可维护性。

标准的 MVC 框架模式下,各层的职责如下

  • Model 层:模型层,负责数据处理,包括网络数据与持久化数据的获取、加工等等,在 android 中典型实现未数据结构的定义类
  • View 层:视图层,负责处理界面绘制,展示数据,并对用户产生交互反馈等,在 android 上的典型实现一般为 activity/fragment 等
  • Controller 层:控制器层,负责处理业务逻辑

在 MVC 架构中,Controller 和 View 都依赖于 Model,架构通过 Controller 来更新数据,通过 View 来展示数据,MVC 架构如下图所示:
标准 MVC 模型

MVC 在移动开发中的问题

在 android 开发中, MVC 架构经常因其开发者的争议,一般都是由 activity 在 MVC 中的职责引起的。

Activity 在 Google 提供的文档中的定义是

An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View). While activities are often presented to the user as full-screen windows, they can also be used in other ways: as floating windows (via a theme with R.attr.windowIsFloating set), Multi-Window mode or embedded into other windows.
Activity 是一个独立的,用户可以专注的事件。 几乎所有 Activity 都会与用户交互,因此 Activity 类负责为您创建一个窗口,您可以在其中放置带有 setContentView(View)的UI。 尽管 Activity 通常以全屏窗口的形式呈现给用户,但它们也可以以其他方式使用:作为浮动窗口(通过具有R.attr.windowIsFloating设置的主题),多窗口模式或嵌入到其他窗口中。

Activity 的在 MVC 的职责在不同的开发者手中是不一样的,只要它可以解决实际的问题,便是正确的。

MVC 的模式

被动模式

绝大部分的 MVC 架构的设计者使用的是此模式,这里的被动,指的是 Model 层的被动。
被动模式下, Model 不会主动将它的变化发给 View 进行更新,而是通过 Controller 通知 View 进行相应的更新,而且只有 Controller 才能对 Model 进行更新。MVC passive mode

主动模式

在 Web 端,传统意义上的 MVC 是主动模式的,而对于移动端,在处理一些数据变化频繁的场景下,可以应用 MVC 的主动模式。
主动模式指 Model 层的主动,它会通知 View 层进行更新。主动模式使用了观察者模式,View 为观察者,Model 为被观察者。
MVC 主动模式

观察者模式

观察者模式是一种阮家的设计模式,定义了对象之间一种一对多的关系。当一个对象发生变化,所有依赖它的对象都将会收到通知。

主动与被动模式的区别

被动模式与主动模式相比,缺点主要是 View 无法感知 Model 的变化,需要 Controller 间接的进行通知。同时,这也是一个优点,Controller 可以更好的控制 View 的更新而无需担心 Model 主动更新变化而产生同步相关的问题。

MVC 的核心思想

MVC 的核心思想是表现层分离,即将领域模型与视图模式进行分离。Model 即为领域模型,而 View-Controller 协作即为视图模型。

小结

今天大概了解了 MVC 的主体思想与两种模式,后续将通过代码实战的形式进行深入了解学习。

代码实战 (除了有两个布局没有完成)

https://github.com/rookiezed/MVC-Learn.git

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值