Git Product home page Git Product logo

cjlrouter's Introduction

CJLRouter

组件化开发解决方案,可用于解耦业务模块,支持分类方法调用以及AppScheme路由两种调用方式

pod管理

pod 'CJLRouter'

路由引用

#import <CJLRouter.h>

/// 路由分类方法转发调用
/// @param SELname 分类方法名
+ (id)routerPerformSELname:(NSString *)SELname;

/// AppScheme路由URI调用
/// URI调用规范:scheme://[MediatorCategory]/[action]?[params]
/// 调用规范说明:路由scheme://路由分类模块说明/调用方法名?方法参数
/// 调用示例:   CJLRouter://login/updateUserName:sex:?name=user&sex=1
///
/// @param uri 调用uri字符串
+ (id)routerPerformWithUri:(NSString *)uri;

业务组件生成

下载业务组件 模板初始化脚本 (CJLRouterModule.py),打开终端进入脚本所在目录进行组件模块初始化

初次运行请先执行 chmod 777 CJLRouterModule.py 指令,对脚本赋予可执行指令

# CJLRouterModule.py [组件模块名称]
./CJLRouterModule.py ModuleName

使用说明

执行CJLRouterModule.py脚本后,组件模块的Router文件夹下将自动生成以下相关文件

路由分类

CJLRouter+ModuleName.h
CJLRouter+ModuleName.m

用于声明当前组件可供外部调用的通信接口,接口方法的明名格式为:+ 当前模块名_方法名

当前组件对外接口示例:

+ (UIViewController *)login_loginViewController;//获取登录页面Controller
+ (BOOL)login_updateUserName:(NSString *)name;//更新用户名

其他组件调用:

//1、路由分类方法转发调用
UIViewController *loginVC = [CJLRouter routerPerformSELname:@"login_loginViewController"];
BOOL result = [CJLRouter routerPerformSELname:@"login_updateUserName:" params:@[@"username"]];

//2、AppScheme路由URI调用
BOOL result = [CJLRouter routerPerformWithUri:@"CJLRouter://login/login_updateUserName:?name=username"];

组件Module管理

ModuleNameModule.h
ModuleNameModule.m

业务组件生命周期管理以及组件间消息通信管理类

  1. 默认自动在 +load 方法中向CJLModuleManager进行注册
  2. 必须实现 CJLModuleProtocol 协议方法:+sharedInstance,-setup
  3. 在程序启动时会自动触发 -setup 方法,请在该方法内进行组件相关初始化及配置。
  4. 根据实际业务需求,在适当的地方通过 CJLModuleManager 触发消息广播。
  5. 根据实际业务需求,有选择的实现 CJLModuleProtocol 协议方法。

示例:APP生命周期管理

//APPDelegate.m 内进行消息广播
- (void)applicationDidEnterBackground:(UIApplication *)application {
    //告知所有实现-applicationDidEnterBackground:的业务组件Module,程序进入后台
    [CJLModuleManager checkAllModulesWithSelector:_cmd arguments:@[CJLSafe(application)]];
    //在此执行主工程在进入后台时的操作...
}

ModuleNameModule.m ,业务组件响应对应方法

- (void)applicationDidEnterBackground:(UIApplication *)application {
    //接收到了程序进入后台通知
    //在此执行当前组件进入后台时的业务操作...
}

组件资源管理

ModuleNameBundle.h
ModuleNameBundle.m

声明当前业务组件资源Bundle,遵循CJLBundleProtocol协议,必须实现 +cjl_bundle 方法,用于返回当前组件Bundle,默认bundle名与业务组件名称相同

/// 需要返回当前业务组件的bundle(默认bundle名与业务组件名称相同)
+ (NSBundle *)cjl_bundle {
    return [self cjl_bundleWithName:@"ModuleName"];
}

cjlrouter's People

Contributors

lele8446 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.