LDBusBundle_IOS 项目教程

LDBusBundle_IOS 项目教程

LDBusBundle_IOS LDBus的目标:(保持业务组件的相对独立性,尽量解耦业务组件之间的代码依赖) 项目地址: https://gitcode.com/gh_mirrors/ld/LDBusBundle_IOS

1. 项目介绍

LDBusBundle_IOS 是一个用于 iOS 平台的业务组件化框架,旨在通过保持业务组件的相对独立性和尽量解耦业务组件之间的代码依赖,来更好地管理应用工程。随着应用需求的逐步迭代,应用的代码体积将会越来越大,为了更好地管理应用工程,我们开始借助 CocoaPods 版本管理工具对原有应用工程进行拆分。但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好的让拆分出去的业务工程能够独立运行,实现组件服务化,我们在此引入 LDBus 去完成业务组件工程之间的 UI 跳转(UI 总线)和 Service 服务化(ServiceBus)。

LDBus 的目标是:

  • 保持业务组件的相对独立性
  • 尽量解耦业务组件之间的代码依赖

主工程只负责组装业务组件,按需所取,组合不同业务组件生成不同应用。业务组件之间的 UI 跳转不引用任何其他业务组件工程的头文件,业务组件之间的服务调用只提供服务的接口头文件,不提供任何服务实现文件。

2. 项目快速启动

2.1 环境准备

确保你已经安装了以下工具:

  • Xcode
  • CocoaPods

2.2 安装依赖

在你的项目根目录下创建一个 Podfile 文件,并添加以下内容:

platform :ios, '9.0'
use_frameworks!

target 'YourTargetName' do
  pod 'LDBusBundle_IOS', :git => 'https://github.com/Lede-Inc/LDBusBundle_IOS.git'
end

然后运行以下命令安装依赖:

pod install

2.3 配置 Bus

每个业务组件工程对应一个 Bus 配置,将 Bus 配置文件放在每个独立的业务组件工程中。配置步骤如下:

  1. 创建 Bundle 资源包文件,添加一个命名为 busconfig.xml
  2. busconfig.xml 文件中配置 URL 导航 Controller 和提供的 Service。

示例 busconfig.xml 文件:

<xml version="1.0" encoding="utf-8">
<bundle name="LDBusDemo" connectorClass="LDCustomConnector" version="0.1.11" customWebContainer="LDMPopWebViewController">
  <url_handler_list>
    <ViewController name="menu" webquery="menuID=(initWithMenu:)" class="MenuController" type="share">
    </ViewController>
    <ViewController name="food" class="ContentController" type="push">
      <URLPattern name="foo/(initWithFood:)" webquery=""/>
      <URLPattern name="type/(initWithType:)"/>
      <URLPattern name="popover/(initWithFood:)" type="pop"/>
      <URLPattern name="modeview" webquery="param=(initWithFood:)" type="modal"/>
      <URLPattern name="about/(initWithUs:)/(others:)" parent="menu?menuID=5" type="push"/>
    </ViewController>
  </url_handler_list>
  <service_list>
    <service name="loginService" class="LDLoginServiceImpl" protocol="LDLoginService"/>
  </service_list>
</bundle>

2.4 启动 Bus

在主工程和各个业务组件工程中皆可使用 Bus。业务组件可以使用 Bus 调用其他组件提供的 URL 跳转配置和提供的服务。

AppDelegate 中完成 Bus 启动,启动时机在 appdelegatewindow 初始化成功之后:

// bus 容器初始化
[LDMBusContext initialBundleContainerWithWindow:self.window andRootViewController:nil];

2.5 使用 UIBus 和服务 Bus

使用 UIBus 的几种情形,通过 [LDMBusContext XXMethod] 完成调用:

  1. 简单数字和字符参数可以配置到 URL 中传递,调用方式如下:
+(BOOL)openURL:(NSString *)url;
  1. 如果还需要传递 Object 参数,将 object 参数封装到 query 中,controller 实例化方法从中获取:
+(BOOL)openURL:(NSString *)url query:(NSDictionary *)query;
  1. 如果需要传递更多展示 Controller 的参数,如 parentURLPathanimatedsourceRectsourceViewController,则可以调用 TTURLAction.h 进行封装:
+(BOOL)openURLWithAction:(TTURLAction *)action;
  1. 如果只是想获得一个 Controller 实例,而不想马上展示,可以调用如下方法获得:
+(UIViewController *)controllerForURL:(NSString *)url;
+(UIViewController *)controllerForURL:(NSString *)url query:(NSDictionary *)query;

另外还可以判断是否能够通过 URL 导航:

+(BOOL)canOpenURL:(NSString *)url;

业务组件提供的服务 Bus 使用如下:

  1. 引用业务组件提供的服务接口文件:
#import <LDCILogin/LDCILoginSessionService.h>
#define SERVICE_LDCILOGINSESSION @"ldci_loginsessionService"
#define kAccountLoginNotification @"AccountLoginNotifcation"
#define kAccountLogoutNotification @"AccountLogoutNotifcation"

@protocol LDCILoginSessionService <NSObject>
/**
 * 自动登录
 */
- (void)autoLogin;
@end
  1. 通过 Bus 获取 Service 实例,调用服务接口方法即可:
[[LDMBusContext getService:SERVICE_LDCILOGINSESSION] autoLogin];

3. 应用案例和最佳实践

3.1 应用案例

LDBusBundle_IOS 可以应用于大型 iOS 应用的组件化开发,特别是在以下场景中:

  • 多业务模块的应用,每个模块需要独立开发和测试。
  • 需要频繁迭代和更新的应用,通过组件化可以减少代码耦合,提高开发效率。
  • 需要灵活组合不同业务模块生成不同应用的场景。

3.2 最佳实践

  • 组件独立性:每个业务组件应尽量保持独立,避免直接引用其他组件的代码。
  • 配置灵活性:通过 busconfig.xml 文件灵活配置 URL 导航和 Service 服务。
  • 代码复用:通过服务接口和实现分离,提高代码复用性。

4. 典型生态项目

LDBusBundle_IOS 可以与其他开源项目结合使用,构建更强大的应用生态系统。以下是一些典型的生态项目:

  • CocoaPods:用于管理项目依赖,确保每个业务组件可以独立开发和测试。
  • JLRoutes:用于处理复杂的 URL 导航,特别是在需要兼容旧项目的情况下。
  • ReactiveCocoa:用于处理复杂的业务逻辑和数据流,提高代码的可维护性。

通过结合这些生态项目,LDBusBundle_IOS 可以更好地满足复杂应用的需求,提高开发效率和代码质量。

LDBusBundle_IOS LDBus的目标:(保持业务组件的相对独立性,尽量解耦业务组件之间的代码依赖) 项目地址: https://gitcode.com/gh_mirrors/ld/LDBusBundle_IOS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马冶娆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值