一种IOS平台下工程项目的组件化构建方法与流程

文档序号:13804570阅读:254来源:国知局
一种IOS平台下工程项目的组件化构建方法与流程

本发明属于计算机开发技术领域,更具体地,涉及一种ios平台下工程项目的组件化构建方法。



背景技术:

随着ios项目开发的推进,新的业务会不断的引入,这导致代码量越来越庞大,所有的代码集中在一个项目中,局部的代码变动往往导致需要整个项目的完整编译,项目编译的时间越来越长,模块之间代码耦合性也导致了测试的困难,不能对单个模块进行单独测试。项目的开发和测试成本不断地增加,维护困难,急需一种好的模块化管理方案来解决这些出现的问题。

为了解决以上问题,各种模块化管理方案出现。目录管理是最原始的方式,仅仅通过目录结构实现代码层次的清晰化。但本质上并没有解决代码之间的依赖混乱的情况,模块化划分也非常不清晰。子工程的方案可以实现代码依赖管理和模块化,但是需要引入复杂的设置,当开发团队成员越来越多的时候,不利于管理。静态库管理方式将依赖代码打包成为静态库,不过由于不能看到源码,调试不方便,同样需要手动引入配置静态库。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种ios平台下工程项目的组件化构建方法,能够模块化的组织和开发工程项目中各功能组件,并实现各功能模块的解耦和动态配置,由此解决现有技术中大的工程项目的开发和测试成本高,维护困难的技术问题。

为实现上述目的,本发明提供了一种ios平台下工程项目的组件化构建方法,包括:

对工程项目按组件层次划分为业务组件、基础组件和路由中间件组件,对所述业务组件和基础组件按功能服务粒度划分为服务子组件;

构建所述路由中间件组件,所述路由中间件组件用于协调解耦所述服务子组件,并为所述服务子组件提供自动发现服务和组件间通信服务,所述路由中间件组件中包含有所述服务子组件的方法接口;

根据所述路由中间件组件中的方法接口构建所述服务子组件;

通过cocoapods建立私有仓库,并将所述服务子组件和路由中间件组件提交到所述私有仓库;

通过cocoapods将所述私有仓库中的相应组件引入所述工程项目,实现所述工程项目的构建。

本发明的一个实施例中,所述业务组件为与业务相关的上层功能服务组件;所述基础组件是为业务组件提供基本功能的底层支撑组件。

本发明的一个实施例中,所述基础组件包括如下一种或多种:网络组件、缓存组件、资源组件、日志组件或配置组件。

本发明的一个实施例中,所述路由中间件组件对外提供服务发现接口,所述服务发现接口定义包括:模块名称、模块下的接口名称、提供给模块接口的参数名称以及是否为缓存模块。

本发明的一个实施例中,所述路由中间件组件通过以下过程实现:

调用nsclassfromstring方法,通过模块名动态创建模块;

调用nsselectorfromstring方法,通过方法名动态创建模块的对外方法接口;

通过respondstoselector验证模块下是否提供了对应接口,如果模块下存在对应接口则通过performselector执行模块下面的参数。

本发明的一个实施例中,所述方法还包括:基于路由组件,构建针对每个组件的特有路由协议,从而将各组件对外的接口进行简化封装,以简化组件之间的调用;其中,所述针对每个组件的特有路由协议采用ios中的类别实现。

本发明的一个实施例中,所述通过cocoapods建立私有仓库,并将所述服务子组件和路由中间件组件提交到所述私有仓库,具体为:

创建用来存储各服务子组件podspec文件的私有仓库;

拉取私有仓库到本地;

创建组件podspec格式文件;

在本地测试验证组件,通过验证后上传各服务子组件的podspec到私有仓库。

本发明的一个实施例中,所述工程项目通过cocoapods引入相应组件,具体为:

组件构建完成并放到私有仓库后,主工程通过podfile引入相关组件,并通过cocoapods组件管理方式podinstall构建工程,组件更新后通过podupdate更新到主工程。

本发明的一个实施例中,所述podspec格式文件中包括如下的一种或多种:组件名称、组件版本、组件功能描述以及组件依赖的三方库。

本发明的一个实施例中,在引用私有仓库时,将私有源添加到所述podfile文件中。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:

(1)本发明提供的ios平台下工程项目的组件化构建方法,包括组件划分,构建路由中间件解耦组件,建立cocoapods私有仓库,主工程使用组件,其中组件的划分包括基础组件、业务组件和路由中间件组件,业务组件依赖于基础组件,组件之间通过路由中间件组件进行相互通信调用。路由中间件组件通过objective-c的runtime机制实现,能够动态的检查和发现相应的组件。构建好的组件采用cocoapods私有仓库的方式托管于bitbucket上面,最终主工程通过cocoapods引入对应的组件。本方案能够将大的工程项目分层为基础组件和业务组件,并将基础组件和业务组件按功能或服务解耦合成服务子组件,并通过路由中间件组件为所述服务子组件提供自动发现服务和组件间通信服务,实现了分模块解耦开发和测试,避免了现有技术中开发和测试的复杂性和高成本,提高了开发和测试效率;

(2)本发明提供的ios平台下工程项目的组件化构建方法,将构建的基础组件,业务组件和路由中间件组件上传到cocoapods私有仓库中,并在主工程中按需引用对应组件,实现了项目的动态灵活开发,提高了功能服务模块的利用性,以及开发测试的效率,并且便于后期的再开发和维护,提高维护效率。

附图说明

图1是本发明实施例中一种ios平台下工程项目的组件化构建方法的流程示意图;

图2是是本发明实施例中一个工程项目的组件划分示意图;

图3是是本发明实施例中一个组件调用方式示意图;

图4是本发明实施例中一个工程项目的构建示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

本发明采用cocoapods的组件化方案解决大型工程项目出现的问题。如图1所示,本发明提供一种ios平台下工程项目的组件化构建方法,包括:

s1、对工程项目按组件层次划分为业务组件、基础组件和路由中间件组件,对所述业务组件和基础组件按服务粒度划分为服务子组件;

首先,按照一定的划分粒度对项目进行组件划分,从组件层次上可以分为业务组件、基础组件和路由中间件组件,其中业务组件在最上层,与业务相关且变化快,基础组件为业务组件提供基本功能,如网络组件、日志组件和缓存组件等。处在业务组件和基础组件之间的是路由中间件组件。

如图2所示,为本发明实施例中一种组件划分的示意图,其中基础组件可划分为网络、缓存、资源、日志、配置等基础功能组件,业务组件可划分为自选、行情、选股、资讯、详情、表哥、搜索、消息等服务功能组件;另外还包括有路由中间件组件。

s2、构建服务子组件和路由中间件组件,所述路由中间件组件用于协调解耦所述服务子组件,并为所述服务子组件提供自动发现服务和组件间通信服务;

根据步骤s1中的组件划分,构建各个服务子组件和各个基础组件;并构建路由中间件组件。

组件和组件间通过中间件组件进行通信,通过引入中间件的方式解耦组件,中间件通过objective-c的runtime特性提供组件服务发现功能,并做到组件内部的业务不受外部影响,调用方不对服务方具有侵入性。本发明实施例中组件的构建过程如下:

s21、构建路由中间件组件dtsmediator。objective-c的动态特性使得组件可以在运行时对其他调用组件的服务进行检测发现。dtsmediator统一对外提供的服务发现接口如下:

/*

*功能:路由组件服务发现接口

*targetname:模块名称

*actionname:模块下的接口名称

*params:提供给模块接口的参数名称

*shouldcachetarget:是否缓存模块

*/

-(id)performtarget:(nsstring*)targetnameaction:(nsstring*)actionnameparams:(nsdictionary

*)paramsshouldcachetarget:(bool)shouldcachetarget

路由中间件组件通过以下过程实现:

1)通过模块名(target前缀)动态创建模块,具体为调用nsclassfromstring方法:

nsstring*targetclass=[nsstringstringwithformat:@"target_%@",targetname];

targetclass=nsclassfromstring(targetclass);

target=[[targetclassalloc]init];

2)通过方法名(action前缀)动态创建模块的对外接口,具体为调用nsselectorfromstring方法。

nsstring*actionstring=[nsstringstringwithformat:@"action_%@:",actionname];

selaction=nsselectorfromstring(actionstring);

3)通过respondstoselector验证模块下是否提供了对应的接口,如果对应模块存在接口则通过performselector执行模块下面的参数:

if([targetrespondstoselector:action]){

return[targetperformselector:actionwithobject:params];

}

s22、构建服务子组件。直接按照路由组件中的action_xxx:(nsdictionary*)params的形式构建。

s23、进一步地,为了简化组件之间的调用,可以基于路由组件,构建针对每个组件的特有路由协议,采用ios中的类别(category)实现,类别是一种为现有的类添加新方法的机制,我们可以为路由组件添加针对其它组件的方法,从而将各组件对外的接口进行简化封装,以简化组件之间的调用。如下代码表示通过路由组件得到模块a下面的某个视图控制器

如图3所示,为本发明实施例中基于路由中间件组件的组件间调用实现机制阐述,具体地:上左是路由组件,上右是路由组件针对每个服务子组件的类别,基于url的路由方式可以把url解析成组件:方法:参数的形式。基于url的方式一般可能是其他app调用自己app组件,基于组件:方法:参数的方式是内部组件调用方式。

s3、通过cocoapods建立私有仓库,并将所述服务子组件和路由中间件组件提交到所述私有仓库;

cocoapods通过podspec语法构建podspec格式文件,语法当中具体描述了组件名称、组件版本、组件功能描述、组件依赖的三方库等。

在web上面简单建立仓库后,git拉取到本地。添加组件后,上传组件的podspec文件到仓库里。具体的cocoapods私有仓库创建过程如下:

1)创建用来存储podspec文件的私有仓库(cocoapodsprivaterepo)。私有源和公共源(cocoapodspublicrepo)不同的是,私有源通过podsearch不能搜索到。私有仓库我们托管在bitbucket上,地址为:https://bitbucket.org/dengtacj/dtspecs。

2)拉取私有仓库到本地,拉取到的私有仓库保存在本地~/.cocoapods/repos/目录下,命令格式为:podrepoaddnameurl。具体命令如下:

podrepoadddtspechttps://bitbucket.org/dengtacj/dtspecs

3)构建组件并按照上面提到的podspecsyntax语法完成组件podspec文件的创建。

4)本地测试验证组件,通过验证后可以上传组件到私有仓库。命令如下:

验证组件:podliblint

上传组件:podrepopushdtspecsdtsmediator.podspec.

每个服务子组件都有自己的仓库,可以是公开的,也可以是私有的,每个服务子组件对应一个podspec文件,文件里面记录了组件的基本信息,如名称,版本,描述,仓库地址,这些podspec文件会被托管在一个固定的私有仓库,这个私有仓库的访问是需要密码的,不像其他的公有仓库,有地址就可以访问。

s4、所述工程项目通过cocoapods引入相应组件,实现所述工程项目的构建。

如图4所示,组件构建完成并放到私有仓库后,主工程通过podfile引入相关组件,并通过cocoapods组件管理方式podinstall构建工程,组件更新后也可以通过podupdate更新到主工程。和公有源不同,当引用私有仓库时,需要把私有源添加到我们的podfile文件中。引入语法如下:

source'https://dengtacj@bitbucket.org/dengtacj/dtspecs.git'

具体的podfile文件内容如下:

#cocoapodsmasterrepo

source'https://github.com/cocoapods/specs.git'

source'https://dengtacj@bitbucket.org/dengtacj/dtspecs.git'

platform:ios,'7.0'

#私有仓库

pod'dtsmediator',

pod'dtsnetwork',

pod'dtsocr4stock'

#共有库

pod'afnetworking'

pod'cocoalumberjack'

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1