App组件化架构设计实践V1.0

1、基本概念与共识

业务组件化(或者叫模块化)作为移动端应用架构的主流方式之一,近年来一直是业界积极探索和实践的方向。在组件化过程中我们深刻体会到“没有绝对正确的架构,只有最合适的架构”这句话的意义。很多通用方案只是组件化的冰山一角,实际落地过程中还有相当多的东西需要考量。

  • 本文讨论的『库』是『功能库』(比如:图片库,网络库),统称为『库』,与具体的产品业务无关;区别于功能库,本文讨论的模块是『业务模块/组件』(比如订单模块,商品模块)。
  • 业务模块的名称,相比组件(Component),我们觉得称之为模块(Module)更为合适。组件强调物理拆分,以便复用;模块强调逻辑拆分,以便解耦。而且如果用过 Android Studio, 会发现它创建的子系统都叫 Module. 但介于业界习惯称之为组件化,所以我们继续使用这个术语。本文下面所用名词,“模块”等同于“组件”。

2、进行组件化的源动力

目前朴新网校有5个App,有很多功能或者模块是可以相互公用的,为了实现功能或模块的可复用用以及代码的高内聚低耦合,同时降低开发和维护成本,提高迭代速度,我们采用模块化结合私有Pods进行管理,对于常用功能或模块进行封装,只要开放出一些简单开关配置方式,就可以实现一个功能,比如日志记录、网络请求模块、网络状态变化提示等。路由实现方案简图如下:
图片描述

3 App基本的分层结构与简介

3.1 功能库(与具体的业务无关):

  • 3.1.1 基础功能库:
    • PXResource(核心资源库)(存放一些公用的资源,Bundle(images、localizable))
    • PXCore(核心基础库)(UI Kits、Tool Kits、Super、Protocol、Bundle(images、localizable))
  • 3.1.2 独立的功能库:

    -------------------不依赖基础库---------------------------

    • PXConfig(核心配置库,域、环境配置,公用常量)
    • PXError(错误Error库)
    • PXNetWork(网络请求库)
    • PXUserCenter(用户数据中心库,持久化用户基础信息,登录状态,用户ID,Token等)
    • PXRxMoya(基于Moya的Rx扩展)
    • PXRxLibs(基于Rx扩展的一些小组件)
    • PXSpring(Spring动画库)
    • PXPageControl(Page控件)
    • PXImagePicker(图片选择器)
    • PXAlertViewController(弹框控制器)
    • PXEmptyKit(无数据控件)
    • PXZFKit(支付组件:封装了支付宝+微信)
    • PXWeChatOpenSDK(微信动态库SDK)
    • PXUMengSDK(朴新UMeng SDK)

    -------------------依赖基础库----------------------

    • PXWebView(WebView容器)
    • PXDocumentReader(文档阅读器)
    • PXShareKit(分享组件)
    • PXPlayer(播放器)

3.2 业务模块

  • 3.2.1 基础业务模块:

    • DBModule:公用的数据Model(添加原则:在三个或三个以上的模块被使用)
    • UIModule:公用的UI(添加原则:在三个或三个以上的模块被使用)
  • 3.2.2 独立的业务功能模块(各模块间独立运行):

    • LoginModule:登录模块
    • ProductModule:商品模块(商品选择、商品详情等)
    • OrderModule:订单模块(订单的生成、订单的支付、订单详情等)
    • CourseModule:课程模块(课程的详情、课程的学习、课程下载等)
    • HomeworkModule:作业模块(作业列表、作业练习等)
    • MaterialModule:资料模块(资料列表、资料查看等)
    • BJLiveUI:直播模块(互动课堂直播)
    • BJPlaybackUI:回放模块(互动课堂回放)
    • DiscoveryModule:发现模块(视频课程)
    • AuditionCardModule:试听卡模块(试听直播、回放课程)
    • CoinPayModule:金币支付模块(学习币的购买)
    • AddressModule:地址模块(地址的选择和编辑)
    • AdvertisingModule:广告模块
    • PointMarketModule:金币商城模块
    • LogisticsModule:物流模块
    • TeacherModule:教师模块
    • InvoiceModule:发票模块
    • ActivityModule:活动模块
    • MessageModule:消息模块
    • FamilyModule:家庭教育模块
    • NoteModule:笔记模块
    • SearchModule:搜索模块
    • UpdateModule:检测更新模块
    • AppReviewModule:App审核状态模块(是否在审核中)
    • MineModule:我的模块

4、App架构概图

图片描述
图片描述

5、App整体架构

图片描述
图片描述

6、App技术架构分层

图片描述

7、总结

移动应用的业务模块化架构设计,其真正的目标是提升开发质量和效率。单从实现角度来看并没有什么黑魔法或技术难点,更多的是结合团队实际开发协作方式和业务场景的具体考量——“适合自己的才是最好的”。朴新网校移动团队通过1年多的实践,发现一味的追求性能,绝对的追求模块间编译隔离,过早的追求模块代码管理隔离等方式都偏离了模块化设计的真正目的,是得不偿失的。更合适的方式是在可控的改造代价下,一定程度考虑未来的优化方式,更多的考虑当前的实际场景,来设计适合自己的模块化方式。希望通过本文提供的具体案例和思考方式,大家都能找到适合自己应用的业务模块化之路。

参考:
蘑菇街、滴滴、淘宝、微信的组件化架构解析
有赞移动 iOS 组件化(模块化)架构设计实践

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
app架构设计是指在开发一个应用程序时,设计合理的架构体系来管理各个模块之间的关系,使得程序具有高性能、易维护、易扩展等优点。 首先,需要确定使用何种架构模式,常见的有MVC(Model-View-Controller)、MVP(Model-View-Presenter)、MVVM(Model-View-ViewModel)等。根据具体需求选择合适的架构模式。 接下来,需进行模块划分与设计。将整个应用拆分成各个模块,每个模块具有清晰的功能边界和职责。例如,可以划分为UI模块、网络请求模块、数据存储模块等。模块之间通过接口进行交互,提高模块的内聚性和松耦合性。 在模块设计过程中,要考虑模块的职责和功能划分。模块之间要有清晰的依赖关系,保证模块的功能独立性和可复用性。 另外,还需要设计数据流的控制。使用数据流控制框架,如Redux或RxJava等,来管理应用中的数据流动。通过定义数据的流向和操作过程,实现数据的状态管理和更新。 最后,需关注应用的性能和可扩展性。设计合理的缓存策略,提高应用的响应速度。同时,预留接口和扩展点,方便后续开发的扩展和修改。 总结来说,app架构设计应该根据具体需求选择合适的架构模式,并进行模块划分和设计,控制数据流动,关注性能和可扩展性。这样能够使得应用程序具有良好的架构体系,提高开发效率和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值