`

模块的设计(书摘)

阅读更多

    模块化的价值毋庸置疑。
    模块化代码的首要特质就是封装。封装良好的模块不会过多向外部披露自身的细节,不会直接调用其它模块的实现码,也不会胡乱共享全局数据。模块之间通过应用 程序编程接口(API)——一组严密、定义良好的程序调用和数据结构来通信。这就是模块化原则的内容。API在模块间扮演双重角色。在实现层面,作为模块 之间的滞塞点(choke point),阻止各自的内部细节被相邻模块知晓;在设计层面,正是API(而不是模块间的实现代码)真正定义了整个体系。
    模块的最佳模块大小,逻辑行在200到400之间,物理行在400到800之间为最佳。模块太小,几乎所有的复杂度都集中在接口,同样不利于理解,也就是透明性的欠缺。
   紧凑性就是一个特性能否装进人脑中的特性。理解紧凑性可以从它的“反面”来理解,紧凑性不等于“薄弱”,如果一个设计构建在易于理解且利于组合的 抽象概念上,则这个系统能在具有非常强大、灵活的功能的同时保持紧凑。紧凑也不等同于“容易学习”:对于某些紧凑 设计而言,在掌握其精妙的内在基础概念模型之前,要理解这个设计相当困难;但一旦理解了这个概念模型,整个视角就会改变,紧凑的奥妙也就十分简单了。紧凑 也不意味着“小巧”。即使一个设计良好的系统,对有经验的用户来说没什么特异之处、“一眼”就能看懂,但仍然可能包含很多部分。
    评测一个API紧凑性的经验法则是:API的入口点通常在7个左右,或者按《代码大全2》的说法,7+2和7-2的范围内。
    如果两个或更多事物中的一个发生变化,不会影响其他事物,这些事物就是正交的。每一个动作只改变一件事,不会影响其他(没有其他副作用)。举个例子,比如读取配置文件,获得系统设置信息这个方法:

module Config
   def self.load_config
         config_str=File.open("r","config.xml").read
         #解析配置文件,可能转化成XML Dom处理等
         
   end
end
  这个方法想当然地认为配置文件存储于磁盘文件中,然而配置文件完全是有可能通过网络获取的,也就是说文件句柄未必来源于磁盘文件,这个方法承担了两个职责:获取配置数据和解析配置数据。重构一下,以提高正交性:
module Config
   def self.load_config(io)
         config_str=io.read
         parse_config(config_str)         
   end
   private
   def self.parse_config(config_str)
    #解析
   end 
end
    这是个小例子,甚至有些不够恰当,用于说明正交性。
    重构技术中的很多坏味道,特别是重复代码,是违反正交性的明显例子,“重构的原则性目标就是提高正交性”。
    DRY(Don't Repeat Yourself)原则,意思是说:任何一个知识点在系统内都应当有一个唯一、明确、权威的表述。这个原则的另一种表述就是所谓SPOT原则(Single Point Of Truth)——真理的单点性。
    提高设计的紧凑性,有一个精妙但强大的方法,就是围绕“解决一个定义明确的问题”的强核心算法组织设计,避免臆断和捏造。

分享到:
评论

相关推荐

    行业文档-设计装置-多功能书签.zip

    3. **技术实现**:这种书签可能内置了小型传感器、微控制器和低功耗蓝牙模块,以实现与移动设备的交互。电池续航和防水防摔设计也是其技术挑战之一。 4. **用户体验**:在设计过程中,用户体验是至关重要的。书签的...

    基于Android平台的手机电子书阅读器设计.zip

    4. 书摘与笔记:允许用户添加书摘和笔记,方便回顾和分享。 三、技术选型 1. 开发工具:使用Android Studio作为主要开发环境,利用其丰富的调试工具和集成开发环境。 2. 开源库:引入如Android Jetpack组件库,提升...

    编写高质量代码 Web前端开发修炼之道 书摘精要

    样式标准则是CSS,它允许开发者独立地定义页面元素的外观和布局,使页面设计更加灵活和统一。行为标准涵盖DOM(文档对象模型)和ECMAScript(JavaScript的标准版本),它们处理网页的交互和动态功能。 书中提到了...

    简约读书笔记ppt模板下载

    这款模板遵循这一原则,通过合理的版面设计和色彩搭配,让每一页PPT都能够直观地展示读书笔记的重点,无论是书摘、感悟还是分析,都能一目了然。 模板的封面通常包含主题、作者及日期等基本信息,设计简洁大方,使...

    微软研发探秘系列课程(6):微软研发揭秘之贺岁版——2006年程序员书籍畅谈 (思想篇)

    例如,可能讨论了《重构:改善既有代码的设计》如何帮助开发者提升代码质量,或者《设计模式:可复用面向对象软件的基础》如何指导团队实现模块化设计。 课程中可能包含的PPT部分,会系统地梳理这些书籍的核心观点...

    读书分享好书推荐PPT模板.pptx

    “请替换文字内容”是需要填充具体内容的地方,可以根据不同的主题和需要,插入相关的数据、案例分析、书摘或是个人阅读体验。例如,在介绍书籍影响力时,可以插入读者评论、专家评价,或是书籍销售数据等。 此外,...

    教育教学-掌悦读书手机客户端 v1.9.zip

    同时,可能设有书摘分享和社区交流模块,用户可以与其他读者互动,分享读书心得,形成良好的学习氛围。 此外,v1.9版本可能对搜索功能进行了优化,提升了搜索速度和准确度,使用户能够快速找到所需书籍。而且,更新...

    编程高手箴言(梁兆新)

    3. **高级编程技巧**:梁兆新先生可能会分享他在编写复杂软件系统时积累的高级技巧,如内存管理、错误处理、程序优化、并发编程以及模块化设计等,这些都是成为高手的关键技能。 4. **代码质量与可维护性**:书中...

    rust-book-summary-master.zip

    Rust是一种系统级编程语言,它的设计目标是提供内存安全、并发性和高性能,同时避免运行时开销和垃圾回收机制。Rust通过所有权系统、生命周期和类型系统实现了这些目标,确保了代码在编译时就能消除常见的错误,如空...

    kindle3 多看2013使用说明书(k3)

    - **多看2013**是一款专为Kindle3设计的中文阅读软件,相较于原生Kindle系统,它提供了更多的文件格式支持、丰富的功能以及更快的更新速度。 - **支持格式**包括但不限于TXT、PDF、EPUB、MOBI以及图片/漫画ZIP/RAR...

Global site tag (gtag.js) - Google Analytics