区块链技术博客
www.b2bchain.cn

基于中心转发模块化思路求职学习资料

本文介绍了基于中心转发模块化思路求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

基于中心转发模块化思路

从上个项目一直考虑将之前的OC项目模块化,但是因为项目模块比较多,依赖太复杂十分困难。但是当时就有了一个模块化思路。

当时准备做一个模块转发层,在App内部对多有集成的模块进行注册。在其他模块调用另外模块的时候利用中心转发层来进行转发。

基于中心转发模块化思路

image-20200826191157961

通过基础的中心转发层进行转发,这样就可以实现模块化,并且不会项目依赖。

中心转发层的实现思路

中心转发层源码地址

我们先从之前代码分析

let moduleA = ModuleA() moduleA.title = "这是标题" self.navigationController?.pushViewController(moduleA, animated: true)

我们想在其他的模块调用另外模块就需要,创建这个模块的对象之后就产生了依赖性。其实仔细的上面代码,无非就是获取另外模块的UIViewController对象,之后给这个模块赋值。

对于设置属性,我们可以通过字典的方式传递,这种不涉及到模块的依赖。我们只要拿到另外模块的UIViewController类型的对象我们就可以跳转了。

获取模块初始化的对象

没有模块的依赖,我怎么创建模块的对象,我怎么给模块进行赋值?这是一个值得思考的事情,专业的事情当然交给专业人去做。

那么创建模块和给模块赋值就交给对应模块,其他模块调用只需要传递一个字典获取到另外模块的对象。

public protocol Module {     /// 根据另外的模块传递的参数生成此模块的对象     /// - Parameter parameter: 其他模块传递过来的参数     /// - Returns: 此模块的实例     static func make(_ parameter:[String:Any]) -> Module }

我们新建一个Module协议,让模块实现这个协议,通过传递的字典进行赋值,之后返回自己的对象本身。

既然没有模块化依赖怎么才能调用这个方法呢?我们可以通过模块的唯一标识符,通过中心转发层找到这个模块之后获取到初始化对象。

public protocol Module {     /// 根据另外的模块传递的参数生成此模块的对象     /// - Parameter parameter: 其他模块传递过来的参数     /// - Returns: 此模块的实例     static func make(_ parameter:[String:Any]) -> Module     /// 模块对应的标识符     static var identifier:String { get } }

为了可以在中心转发层拿到对应模块,那么就需要在App初始化时候注册所有App依赖的模块。

/// 注册对应的模块 /// - Parameter controllerType: 模块视图类型 public mutating func register<T:Module>(_ controllerType:T.Type) {     let block = { parameter in         return T.make(parameter)     }     self.registerControllers[T.identifier] = block }

我们把调用模块方法生成模块实例的回掉放在一个字典里面,通过唯一标识符找到这个回掉返回对应的模块实例。

private func module() -> Module? {     guard let makeBlock = ControllerCenter.center.registerControllers[identifier] else {         return nil     }     return makeBlock(parameter) }

Modify

为了让将来模块调用简单,我们就新建一个Modify存储我们传递的属性,存储我们前往模块的标识符。

“`swift
extension ControllerCenter {

基于中心转发模块化思路

从上个项目一直考虑将之前的OC项目模块化,但是因为项目模块比较多,依赖太复杂十分困难。但是当时就有了一个模块化思路。

当时准备做一个模块转发层,在App内部对多有集成的模块进行注册。在其他模块调用另外模块的时候利用中心转发层来进行转发。

基于中心转发模块化思路

image-20200826191157961

通过基础的中心转发层进行转发,这样就可以实现模块化,并且不会项目依赖。

中心转发层的实现思路

中心转发层源码地址

我们先从之前代码分析

let moduleA = ModuleA() moduleA.title = "这是标题" self.navigationController?.pushViewController(moduleA, animated: true)

我们想在其他的模块调用另外模块就需要,创建这个模块的对象之后就产生了依赖性。其实仔细的上面代码,无非就是获取另外模块的UIViewController对象,之后给这个模块赋值。

对于设置属性,我们可以通过字典的方式传递,这种不涉及到模块的依赖。我们只要拿到另外模块的UIViewController类型的对象我们就可以跳转了。

获取模块初始化的对象

没有模块的依赖,我怎么创建模块的对象,我怎么给模块进行赋值?这是一个值得思考的事情,专业的事情当然交给专业人去做。

那么创建模块和给模块赋值就交给对应模块,其他模块调用只需要传递一个字典获取到另外模块的对象。

public protocol Module {     /// 根据另外的模块传递的参数生成此模块的对象     /// - Parameter parameter: 其他模块传递过来的参数     /// - Returns: 此模块的实例     static func make(_ parameter:[String:Any]) -> Module }

我们新建一个Module协议,让模块实现这个协议,通过传递的字典进行赋值,之后返回自己的对象本身。

既然没有模块化依赖怎么才能调用这个方法呢?我们可以通过模块的唯一标识符,通过中心转发层找到这个模块之后获取到初始化对象。

public protocol Module {     /// 根据另外的模块传递的参数生成此模块的对象     /// - Parameter parameter: 其他模块传递过来的参数     /// - Returns: 此模块的实例     static func make(_ parameter:[String:Any]) -> Module     /// 模块对应的标识符     static var identifier:String { get } }

为了可以在中心转发层拿到对应模块,那么就需要在App初始化时候注册所有App依赖的模块。

/// 注册对应的模块 /// - Parameter controllerType: 模块视图类型 public mutating func register<T:Module>(_ controllerType:T.Type) {     let block = { parameter in         return T.make(parameter)     }     self.registerControllers[T.identifier] = block }

我们把调用模块方法生成模块实例的回掉放在一个字典里面,通过唯一标识符找到这个回掉返回对应的模块实例。

private func module() -> Module? {     guard let makeBlock = ControllerCenter.center.registerControllers[identifier] else {         return nil     }     return makeBlock(parameter) }

Modify

为了让将来模块调用简单,我们就新建一个Modify存储我们传递的属性,存储我们前往模块的标识符。

“`swift
extension ControllerCenter {

基于中心转发模块化思路

从上个项目一直考虑将之前的OC项目模块化,但是因为项目模块比较多,依赖太复杂十分困难。但是当时就有了一个模块化思路。

当时准备做一个模块转发层,在App内部对多有集成的模块进行注册。在其他模块调用另外模块的时候利用中心转发层来进行转发。

基于中心转发模块化思路

image-20200826191157961

通过基础的中心转发层进行转发,这样就可以实现模块化,并且不会项目依赖。

中心转发层的实现思路

中心转发层源码地址

我们先从之前代码分析

let moduleA = ModuleA() moduleA.title = "这是标题" self.navigationController?.pushViewController(moduleA, animated: true)

我们想在其他的模块调用另外模块就需要,创建这个模块的对象之后就产生了依赖性。其实仔细的上面代码,无非就是获取另外模块的UIViewController对象,之后给这个模块赋值。

对于设置属性,我们可以通过字典的方式传递,这种不涉及到模块的依赖。我们只要拿到另外模块的UIViewController类型的对象我们就可以跳转了。

获取模块初始化的对象

没有模块的依赖,我怎么创建模块的对象,我怎么给模块进行赋值?这是一个值得思考的事情,专业的事情当然交给专业人去做。

那么创建模块和给模块赋值就交给对应模块,其他模块调用只需要传递一个字典获取到另外模块的对象。

public protocol Module {     /// 根据另外的模块传递的参数生成此模块的对象     /// - Parameter parameter: 其他模块传递过来的参数     /// - Returns: 此模块的实例     static func make(_ parameter:[String:Any]) -> Module }

我们新建一个Module协议,让模块实现这个协议,通过传递的字典进行赋值,之后返回自己的对象本身。

既然没有模块化依赖怎么才能调用这个方法呢?我们可以通过模块的唯一标识符,通过中心转发层找到这个模块之后获取到初始化对象。

public protocol Module {     /// 根据另外的模块传递的参数生成此模块的对象     /// - Parameter parameter: 其他模块传递过来的参数     /// - Returns: 此模块的实例     static func make(_ parameter:[String:Any]) -> Module     /// 模块对应的标识符     static var identifier:String { get } }

为了可以在中心转发层拿到对应模块,那么就需要在App初始化时候注册所有App依赖的模块。

/// 注册对应的模块 /// - Parameter controllerType: 模块视图类型 public mutating func register<T:Module>(_ controllerType:T.Type) {     let block = { parameter in         return T.make(parameter)     }     self.registerControllers[T.identifier] = block }

我们把调用模块方法生成模块实例的回掉放在一个字典里面,通过唯一标识符找到这个回掉返回对应的模块实例。

private func module() -> Module? {     guard let makeBlock = ControllerCenter.center.registerControllers[identifier] else {         return nil     }     return makeBlock(parameter) }

Modify

为了让将来模块调用简单,我们就新建一个Modify存储我们传递的属性,存储我们前往模块的标识符。

“`swift
extension ControllerCenter {

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 基于中心转发模块化思路求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们