花椒移动端基础框架架构
奇技指南
本文转载自花椒技术。作者:花椒android组
背景
随着公司业务需求的不断增加、三方合作不断接入、新APP快速产出,就会出现想在原有的代码中想增加新的业务和功能,怕影响老逻辑,想不影响老逻辑,去扩展又扩展不了的局面,就需要对应用的架构做相关的设计和优化,使可以快速复用扩展、减少网状耦合、减少开发时间成本、减少测试成本等。基础框架架构就是为解决这些问题所设计的。
设计
对公司业务、功能及三方合作相关内容进行梳理分析,然后对相关模块进行切割分层。我们的基础框架架构设计思路是按照纵向切割,横向切割及立体扩展三方面下手:
基于纵向切割:针对各业务模块、各功能模块的单一业务和单一功能进行封装,防止对于非自己职责范围的业务和功能的依赖。
基于横向切割:针对业务层级,功能层级、基础依赖层级进行分层,方便使用者从不同的层级去集成。
基于立体扩展:方便快速集成扩展输出APP。
基础框架架构设计各分层说明如下:
业务模块层:针对业务逻辑、功能模块、Ui组件及此业务所设计的数据模型之间的交互封装管理。
功能模块层:针对三方接口及协议的统一封装,使得接入透明化。
UI组件层:针对常用UI通用组件封装。
基础支撑层:依赖的三方合作接口及sdk。
具体基础框架架构设计如下图所示:
实现
对上图的基础框架架构设计的基础功能模块层,UI组件层及业务模块层相关分层实现细节及注意事项详细说明,具体如下:
基础支撑层
整个应用开发的最小单元,主要是应用中依赖的相关三方库及api接口等,做开发的同学都知道,不做过多说明。
基础功能模块层
对基础支撑层中各种凌乱的三方库功能进行归类分析,对于同类的功能抽象统一的接口、协议,减少开发者对各种三方库接口的接入成本及对三方库的对象的耦合度,开发者只需要了解抽象出来的接口及输入输出数据模型。关注点如下:
抽象同类型同功能的三方接口协议
接口及模块设计专注单一功能
做到使用者对三方接口的使用透明化
具体实现如下图三方授权登陆功能模块所示:
UI组件模块层
对常用的UI组件进行封装,方便各个业务或者应用的复用、减少大量相同View对象的创建数量,这个使用可以参考设计模式中的享元模式。关注点如下:
避免View重复创建、销毁,增加系统内容内存开销
由于生命周期可能不一致,View变化的管理与创建销毁的管理分开
具体实现如下图示例所示:
业务逻辑层
由于业务需求是随时随地不断变化的,所以这层的设计要做到在不修改原有业务的基础上可以对业务扩展和复用,在把业务逻辑、业务视图、业务数据模型等进行封装,并且在封装的时候要分析清楚哪些是不可变的的元素,哪些是可变的元素,把不可变的元素进行封装,可变的元素进行抽象,方便后期需求变化扩展。关注点如下:
模块业务专注单一
分析出不变因素与可变因素
模块接口简单清晰,方便接入
不变的东西尽可能封装
具体实现如下图示例所示:
基础框架立体分层
基础框架的设计目的,就是为了快速输出APP,然而基础框架不可能满足所有新的app的需求,就需要对现有基础框架中不满足需求的功能层、UI层、业务层进行扩展实现,以满足现有业务的需求,关注点如下:
基础架构框架:首张图中所设计的内容,主要是一些基础功能的封装,相关基础业务的抽象等。
业务APP扩展框架:对基础框架层的依赖及不满足需求的业务和功能的扩展。
APP层:组合封装输出新的APP应用
具体实现如下图示例所示
架构层级封装依赖调用
在架构设计过程中调用时序也是非常重要的,关注点如下:
避免下层调用上层
避免同层级互相持有调用
避免隔层持有调用
少使用网状结构,多使用星状结构
具体调用时序示例:
架构优化注意事项
无论封装什么样的模块,注意这几个设计原则:合成复用、开闭原则、里氏替换,依赖倒置、单一职责、接口隔离原则、迪米特法则(有成熟的设计模式可以套用)
使用简单化、耦合减少化、复用扩展化
封装的模块最好使用自己的输入输出模型,防止过多依赖,不能即拿即用,破坏封装性。
分清楚要用is a还是has a,方便使用组合还是继承。
避免生搬硬套、过于理想主义(蜘蛛非要扩展个蜘蛛侠,哪也没招
最新活动
随着运维工作从规模和复杂度多方面的爆炸式增长,传统的运维手段已经无法满足如今业务系统运维管理的需求。AI 技术日趋成熟,智能运维(AIOps)应运而生,给运维行业带来了很多的变革和机会,并逐渐成为一种新的发展趋势。
如何将大数据和机器学习的方法引入运维的各个领域方向?如何搭建一套高效的运维平台?如何快速落地AIOps?本次沙龙围绕这些问题,邀请多位专家共同探索AIOps落地实践。
精彩内容都在360互联网技术训练营第18期——AIOps落地实践探索
识别下方二维码或点击阅读原文,立即报名
界世的你当不
只做你的肩膀
无
360官方技术公众号
技术干货|一手资讯|精彩活动
空·
你“在看”我吗?
花椒移动端基础框架架构相关推荐
- 从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...
http://zz563143188.iteye.com/blog/1877266在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样 ...
- java职业发展路线图_从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...
http://zz563143188.iteye.com/blog/1877266在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样 ...
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构.近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验,这对于最近正在整理Spr ...
- 微服务架构的基础框架选择
最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论 微服务架构 .近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验,这对于最近正在整理S ...
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo? - 推酷
微服务架构的基础框架选择:Spring Cloud还是Dubbo? - 推酷 微服务架构的基础框架选择:Spring Cloud还是Dubbo? - 推酷 posted on 2016-07-30 2 ...
- 架构师成长之路:如何做基础框架设计?架构师落地的核心能力
前面,已经统一了对框架的认识. 接下来看看如何做基础框架设计,聊聊要做些什么.以及如何做基础框架设计:然后再看看使用基础框架功能的基本方式. 一:基础框架要实现的功能的来源 1:持续积累的通用功能.公 ...
- vue移动端项目基础框架搭建
本文章,主要提供vue移动端项目基础框架搭建思路,每个独立的模块网上有很多相关的文档. 移动端vue项目基础框架搭建,主要包括6个步骤 项目使用的脚手架vue-cli搭建模板,2.使用淘宝lib-fl ...
- WCF服务端运行时架构体系详解[下篇]
作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指 ...
- 【转载】微服务,我们需要哪些基础框架?
微服务(MicroServices)架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点(technica ...
最新文章
- 发现一款新一代项目管理软件
- Redis入门第二篇【存储数据结构之string类型】
- 安装ubuntu20.4+gtx1050+cuda11.3
- PHP的file_put_contents函数把一个字符串写入文件中
- 初学者如何选择合适的机器学习算法(附算法速查表)
- 网络服务器安全协议,ipsec 网络安全协议
- 「译」 用 Blazor WebAssembly 实现微前端
- telnet命令 date命令
- ArcGIS Runtime SDK for .NET (Quartz Beta)之连接ArcGIS Portal
- Code Review
- android google map研究
- Java抽奖抢购算法
- BIO | NIO | AIO (Java版)
- Dalvik和Java运行环境的区别
- Linux下不同颜色文件的类型
- 强化学习(RL)AlphaGo Zero训练五子棋
- ABB机器人GSD文件获取的几种方法
- 嵌入式linux设置屏幕亮度
- No tracked branch configured for branch master or the branch doesn‘t exist. To make your branch trac
- 阿里云oss 回调失败 203 Non-Authoritative Information
热门文章
- 类似于网易新闻客户端的界面实现01
- 5-按键灯 技巧2:中断控制方式 | Mixly技巧系列
- 7月20日第壹简报,星期三,农历六月廿二
- 我的世界服务器换披风的网站,我的世界正版披风怎么换|或
- 做自媒体拍短视频,不想露脸怎么玩?
- 什么尼康没有把取景线条设置成九宫格,而是设置成16格,详解
- 获取其它小程序的appid和path
- sqlalchemy表关系之多对多
- Linux mono环境,linux+mono+xsp+apache搭建asp.net环境
- Win10《芒果TV》发布两周年纪念特别献礼,陪你度国庆,好礼送不停