iOS程序模块化设计

1、模块化设计的概述:编程

        模块化设计(Block-based design):对必定范围内的不一样功能或相同功能的不一样性能、不一样规格的产品进行功能分析的基础上,划分并设计出一系列功能模块,经过模块的选择和组合构成不一样的定制产品,以知足市场的不一样需求。设计模式

       模块化设计是绿色设计方法之一,绿色设计是指“在产品整个生命周期内,着重考虑产品环境属性(可拆卸性、可回收性、可维护性、可重复利用性等)并将其做为设计目标,在知足环境目标要求的同时,保证产品应该有的功能、使用寿命、质量等要求”。ruby

       绿色设计的原则被公认为“3R”的原则,即Reduce,Reuse, Recycle, 减小环境污染、减少能源消耗,产品和零部件的回收再生循环或者从新利用。架构

2、 模块化设计的特色:app

  • 控制了程序设计的复杂性:模块化设计将总体进行切割封装,每一小的功能便可封装成一个小的模块,独立运行,互不影响,控制了总体的复杂性。
  • 各模块相对独立、功能单1、结构清晰、接口简单:模块化后的代码相对独立,功能单一,只在外部提供必要的接口供外界调用,内部的实现过程,隐藏在内部,面向对象的接口编程,使得结构清晰,接口简单,能达到高内聚,低耦合的效果。
  • 通用性:模块化设计须要保证抽出来的功能不管是在SDK支持的功能上仍是屏幕尺寸的适配上都用灵活性的方法来封装,这样才能保证应用可以部署在支持的最低系统版本基础上的同时,适应不一样屏幕的适配。
  • 避免程序开发的重复劳动:每一个项目中,都会或多或少的涉及到相同的功能和UI界面展现,将这些相同的功能或界面UI进行模块化,无疑是能避免程序开发的重复劳动,同时也可以提升编码的质量。
  • 缩短了开发周期:将项目中涉及到的功能和UI界面提早进行模块化后,须要用到时直接调用,进行组装,能缩短开发周期,同时也能避免资源浪费。
  • 易于维护和功能扩充:由于将总体的功能进行模块化,使得每个功能只是一个小的功能点,相对来讲,更易于维护。有新的需求,须要增长新的功能点,也方便统一扩充,以前模块化好的代码也无需改动,易于维护。

3、模块的划分:模块化

        模块的划分能够从架构层面、业务层面或功能层面上进行划分:工具

      (一)架构层面:性能

       每一个项目都会有总体的架构,这个架构就像地基同样,只有搭好了架构才能在这个基础上进行相应模块功能的开发。项目架构在搭建的过程当中,从层级上来讲,能够按如下方式进行搭建(如下为有名服务的架构):测试

       项目目录“UrMingService”,主要开发工做区域下,总体分为“Classes”, “Resources”/ “Tools”和“Supporting Files”三个大的目录:编码

       一、在“Classes”这个目录下每一个模块又按MVC的设计模式进行搭建,进行分门别类,方便管理,也增长了代码层级的可读性,咱们在“有名服务”的项目中分为“首页”、“消息”、“发布”、“订单”和“个人”五个大模块,搭建架构时,在这几大业务模块的基础上,增设一个“Public”模块,这个模块里面主要是放置一些项目最上层级的基类或公共类,好比导航栏和底部标签栏总体风格的设置等,也能够用MVC的模式进行层级化管理。

       二、“Resources”/ “Tools”这个目录下,主要是分门别类按功能进行封装好的工具类和整个项目会用到的图片资源,对于图片资源放置的层级目录能够按大体分为:引导页、导航栏、标签栏和展现类。

       三、“Supporting Files”这个目录下,主要用于放置整个项目会用到的本地文件,应用icon和启动页图片管理的“Images.xcassets”,系统全局配置文件,国际化文件等。

     (二)业务层面:

       业务层面的模块划分跟产品设计的业务模块划分有关,能够将不一样业务划分红各个子模块,这是相对总体又独立的划分,好比“有名服务”中咱们将业务模块划分为“首页”、“消息”、“发布”、“订单”和“个人”,每个相对独立的业务模块组装在一块儿,完成了“有名服务”所要展现的主题与业务。

       业务模块的统一与业务模块之下的UI界面风格的统一有利于打造一系列同类风格的产品,这样能够在架构与功能模块化的基础上,将同类产品进行总体的模块化,实行工厂化定制开发。

       优势:从业务层面上的划分,会使得各个模块更加独立。

       缺点:处理公共的事务将会变得繁琐。

      (三)功能层面:

       功能层面的模块划分,是为了功能独立,实现高内聚,低耦合。每个小的功能模块能运行,能调试,能测试,各个功能之间基本是彻底独立的,不存在相互依赖的关系。

       可是功能是与业务没法分割的,咱们在开发时,须要宏观的把控业务与功能之间的关系,对于类似的业务模块,须要统一区别开发,协做完成,防止出现重复作工。

       优势:职责独立清晰。

       缺点:各司其责,缺乏连续性与宏观性。

4、 常见问题及解决方案:

       一、问题:相同功能,多处使用。

       解决方案:将各个功能按职责剥离出来,各自开发各自的功能模块。

       能独立运行,能编译为静态库,有完整的内部接口文档。

       符合:可拆卸行、可回收性、可维护性和可重复利用性。 

       二、问题:若是模块拆分后,各个模块常常会有第三方库的依赖,好比公共库等。如何避免重复引用及引用版本的问题。

       解决方案:用CocoaPods软件解决。

       第三方的依赖所有由它自带的podfile配置完成,它会根据项目中引用的第三方打包于项目中,若是遇到多个重复引用时,它将会合并引用。咱们的各个模块也能够作成独立的podspecs文件,供其余模块引用,这样就能够实现模块的升级与更新。

      三、问题:功能模块化后,每一个模块的具体功能是怎样的?

      将应用程序中的功能分解为独立的模块,这带来了一个新的挑战——咱们须要确保这些互不依赖的零件们可以在一块儿工做。

      一个模块系统的另外一个特色是外部依赖的声明。不少组件对外部条件有必定需求。使用依赖模式来维持模块系统中组件之间的依赖性有一个大前提,那就是咱们必须遵循一系列的规则:

      第一个规则是向后兼容性:若是新版本发布,那么全部在以前版本下可创建的契约也必须可以在新版本下工做。

      第二个规则是,系统中的组件须要准确的说明它们须要什么。当一个模块的依赖性产生改变的时候,它必需要说出来,这样系统才可以准确的确认这些依赖性是否被知足。

 5、模块化设计综述:       

       模块最重要的属性是它们应该尽量的独立和自包含;模块应被设计成能够提供一整套功能,以便程序的其它部分与它清楚地相互做用;模块提供的功能必须是完整的,以便它的调用者们能够各取所需。

       模块化就是为了减小循环依赖,减小耦合,提升设计和开发的效率。为了作到这一点,咱们须要有一个设计规则,全部的模块都在这个规则下进行设计。良好的设计规则,会把耦合密集的设计参数进行归类做为一个模块,并以此划分工做任务。而模块之间彼此经过一个固定的接口(所谓的可见参数)进行交互,除此以外 的内部实现(所谓的隐参数)则由模块的开发团队进行自由发挥。

       最后但也是重要的一点:方法命名的规范性很重要,注释很重要,若是没有注释只有开发者心中很清楚,因此必要的注释会给后期的代码维护工做带来便利的同时也提升效率。每一个界面的主要是用于作什么的,能够在头文件中适当进行说明,如图:

 

参考文献:

http://doruby.com/projectmanage/2013/04/12/block-based-design/

http://developer.51cto.com/art/201001/179842_1.htm

http://book.51cto.com/art/201007/212898.htm

http://blog.csdn.net/newjerryj/article/details/7749901

http://blog.csdn.net/optman/article/details/2319450

http://blog.csdn.net/jyc1228/article/details/4636037

相关文章
相关标签/搜索