为了账号安全,请及时绑定邮箱和手机立即绑定

朴新网校App组件化架构设计实践V1.0

标签:
iOS 架构

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年多的实践,发现一味的追求性能,绝对的追求模块间编译隔离,过早的追求模块代码管理隔离等方式都偏离了模块化设计的真正目的,是得不偿失的。更合适的方式是在可控的改造代价下,一定程度考虑未来的优化方式,更多的考虑当前的实际场景,来设计适合自己的模块化方式。希望通过本文提供的具体案例和思考方式,大家都能找到适合自己应用的业务模块化之路。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消