为什么要组件化?
- 运用体积越来越大
- 事务代码耦合越来越多
- 代码量增加
- 不易于功用复用
组件化的优缺陷
长处
- 事务分层、解耦,易于维护代码
- 便于各个事务功用拆分、抽离,实现真实的功用复用
- 事务阻隔,利于跨团队开发代码操控和版本风险操控的实现
- 组件化对代码封装性、合理性都有一定的要求,提升开发人员的规划能力
缺陷
- 增加开发人员的学习成本
- 增加了代码的冗余,组件化颗粒度越细,中间代码越多
- 增加了项目的复杂度
组件化计划有哪些?对应的优缺陷?
-
Target-Action
: CTMediatorTarget-Action这个计划是根据
ObjC
的runtime
、category
特性动态获取模块,例如通过NSClassFromString
获取类并创立实例,通过performSelector
+NSInvocation
动态调用办法。首要每个模块需要装备Target和Category,其中Target是每个组件对应一个或者多个Target,Category是中间层Mediator的分类,运用分类的目的是为了让Mediator的事务代码分离,然后降低Mediator中的依靠和耦合性。
中间层Mediator利用了runtime的反射机制,在Category中找到对应Target以及对应的Action进行调用组件
长处
- 解耦,只存在组件依靠中间层(单向依靠)
- 利用 Category 能够清晰声明的接口,进行编译查看
- 一致处理了一切组件间调用进口,方便办理
缺陷
- 每个组件有对应的Category中间件,代码量增加
- 有硬编码问题,界说的String
-
URL Scheme
: JLRoutes、MGJRouterJLRoutes全局会保存一个Map,这个Map会以scheme为Key,JLRoutes为Value。所以在routeControllerMap里边每个scheme都是仅有的。
在每个JLRoutes里边都保存了一个数组,这个数组里边保存了每个路由规矩JLRRouteDefinition里边会保存外部传进来的block闭包,pattern,和拆分之后的pattern。
长处
- 服务器能够动态操控页面跳转,能够一致处理页面问题之后的错误处理,能够一致三端(iOS、Android、H5)的恳求方式
缺陷
- URL短链接分布注册,导航的硬编码较多
- Class的load办法进行注册,太多对启动App时主线程有影响
- 内存常驻比较严重,一切的url、class、实例,block必须提早注册
-
Protocol
:BeeHive各个模块间从直接调用对应模块,变成以Service的方式,避免了直接依靠。App生命周期的分发,将耦合在AppDelegate中的逻辑拆分,每个模块以微运用的方式独立存在。
长处
- 协议接口规范,遵循依靠反转准则
- 无硬编码
缺陷
- 短少一致调度层,组件办法调用分散,难于会集办理
- 架构的灵活性不够高
项目中的组件化
架构的根底-五大准则
- 单一功用准则:目标功用要单一,不要在一个目标里边增加许多功用
- 开闭准则:扩展是敞开的,修正是关闭的
- 里氏替换准则:子类目标是能够代替基类目标的
- 接口阻隔准则:接口的用途要单一,不要在一个接口上根据不同入参实现多个功用
- 依靠反转准则:办法应该依靠笼统,不要依靠实例。iOS开发便是高层事务办法依靠于协议。
怎么划分组件的上基层联系?
- 与事务无关的根底组件,比如网络恳求、图片加载等
- 通用的功用组件,比如账号、统计埋点、付出、共享等
- 日常迭代的事务组件
组件规划严格执行五大准则进行规划。