对App应用架构搭建的一些思考
当下随着App开发技术的越来越成熟,多人协同开发必不可少,一个团队中每个人的代码风格、技术栈都存在差异,因此统一一套成熟的开发架构必不可少,可以提高开发效率、统一代码风格、为项目维护提供便利。
当下App源码工程通常采用组件化结构,将一个工程拆分为公共基础组件、业务功能库组件、业务数据组件、业务逻辑组件。
在CommonModel公共基础组件里面,依赖一些通用工具,如:图片加载库Glide、日志库Log、常用工具类utilcodex、简单的数据存储mmkv、下拉刷新SmartRefreshLayout、recycleview适配器baseQuickAdapter、路由库Arouter、lifecycle、ktx、jetpack组件等,需要所有的业务逻辑模块对其进行依赖,提供给各个业务逻辑模块使用,避免各个模块重复依赖,也利于第三方库的管理。
其它的业务专用功能库,如视频库(视频取流、解码、转码等)、支付库(支付宝、微信等)提供给特定的业务模块,只有相应的业务模块依赖。
业务数据Model是将对应的业务数据接口进行封装,一般包含网络http(s)接口、websocket、socket、ftp、database等需要与远程后端或本地数据进行数据方面操作强相关逻辑的封装。如登录功能,使用将登录接口进行封装,在数据模块定义登录接口,接受用户名、密码等通过网络发送给后端进行验证,处理返回结果,将结果回调给逻辑模块。
业务逻辑Component是负责与用户进行交互的上层逻辑,如视频模块包含的预览、回放界面、对业务数据模块调用获取数据,展示数据等逻辑,一般情况下各个业务模块相互独立,不存在依赖关系。
App壳工程,不包含任何业务相关的逻辑,依赖所有业务模块,是整个程序的入口。
以上是对整个工程结构的一些思考,那么通常情况下,各个业务模块是需要进行通信的,并非完全不相关的,比如业务A中有个地方需要携带一些数据跳转到业务B界面进行展示,这就涉及到组件间通信了。
组件间通信:
业务组件间通信通常包含界面跳转、数据交换等,由于没有依赖关系,不能直接调用。
那么都有哪些解决办法呢?
1、 采用第三路由框架
比较出名的是Arouter
2、 自己实现一套框架
对App应用架构搭建的一些思考的更多相关文章
- [转]Android App整体架构设计的思考
1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...
- Java生鲜电商平台-App系统架构开发与设计
Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...
- 整合springboot(app后台框架搭建四)
springboot可以说是为了适用SOA服务出现,一方面,极大的简便了配置,加速了开发速度:第二方面,也是一个嵌入式的web服务,通过jar包运行就是一个web服务: 还有提供了很多metric,i ...
- CentOS6.8下MySQL MHA架构搭建笔记
转载请注明出处,本文地址:http://www.cnblogs.com/ajiangg/p/6552855.html 以下是CentOS6.8下MySQL MHA架构搭建笔记 IP资源规划: 192. ...
- App开发架构指南(谷歌官方文档译文)
这篇文章面向的是已经掌握app开发基本知识,想知道如何开发健壮app的读者. 注:本指南假设读者对 Android Framework 已经很熟悉.如果你还是app开发的新手,请查看 Getting ...
- MVC三层架构搭建
MVC三层架构搭建 项目主要是用三层来搭建项目,三层分为表现层,数据层和业务层.项目用了目前比较流行的IOC架构.目前流行的IoC 框架有AutoFac,Unity,Spring.NET等,项目中选用 ...
- Nginx-LNMP架构搭建
目录 Nginx-LNMP架构搭建 LNMP架构概述 LNMP架构环境部署 部署LNMP 部署博客Wordpress 搭建知乎产品wecenter 搭建edusoho (修改域名及安装路径) 数据库拆 ...
- App 后台架构
转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53933096 做App做的久了,就想研究一下与之相关的App后台,发现也是蛮有趣的 ...
- 新东方APP技术架构演进, 分布式系统架构经验分享
今天的演讲题目是"新东方APP技术架构演进, C端技术经验分享" 作者:张建鑫, 曾任IBM高级软件架构师, 滴滴高级技术专家, 现任新东方集团高级技术总监 古代东西方的思想家都产 ...
随机推荐
- linux(centos8):查看操作系统的当前版本(os/kernel/bash)
一,查看redhat系操作系统的版本: 适用于centos/fedora/rhel等 [root@centos8 ~]# cat /etc/redhat-release CentOS Linux re ...
- ps 批量kill进程
Linux下批量kill掉进程 ps -ef|grep java|grep -v grep|cut -c 9-15|xargs kill -9 管道符"|"用来隔开两个命令,管 ...
- centos8平台使用rpm管理软件包
一,什么是rpm rpm是redhat package manager redhat的软件包管理器 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/a ...
- day70:Vue:Git&路飞学城页面效果
目录 1.Git 2.路飞学城项目页面效果 0.安装elements UI 1.顶部导航栏效果 2.轮播图效果 1.Git 什么是git?分布式版本管理工具 1.git操作 # 1 创建git本地仓库 ...
- IntelliJ IDEA 2020.2 x64 激活 2020-09-18亲测有效
idea 激活,查阅许多资源和文章,激活码都失效,无意发现该资源(https://macwk.com/article/jetbrains-crack),亲测有效(2020-09-18),在此记录,以备 ...
- Django( 学习第三部 Django的url路由层)
目录 url路由层 路由匹配(有名分组与无名分组) 反向解析 路由分发 名称空间(了解) Django版本区别 url 路由匹配 注意事项: url方法,第一个参数是正则表达式,只要第一个参数能够匹配 ...
- Promise 配合 axios 使用
Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法 很细致的Promise使用详解 自己脑补 vue 工程化的 ...
- python接口自动化测试遇到的问题及解决方案
工作中xml中的某一个字段是全网唯一,这就需要进行参数化处理.此次对这一个字段进行参数化处理引用了random模块和index()函数.代码如下: #!/usr/bin/python # -*- co ...
- LuoguP1286 两数之和
题面概括 将n个数两两相加得到n*(n-1)/2个和,给出这些和,求所有原数方案 n<=500 LuoguP1286 题解 此题原题是 n<10, 没啥可做的 先将 \(n*(n-1)/2 ...
- Azure Data Factory(二)复制数据
一,引言 上一篇主要只讲了Azure Data Factory的一些主要概念,今天开始新的内容,我们开始通过Azure DevOps 或者 git 管理 Azure Data Factory 中的源代 ...