模块设计
深模块设计,简单的接口和复杂的实现分离
每一个模块都会提供抽象的接口,使用这并不需要知道内部实现,只需要调用接口,传递对象的参数使用即可。
对于复杂的深模块,只需要暴漏简易的接口即可。
定义错误
尽量减少代码,编写通用的异常处理模块,通过通用性来降低异常处理复杂度。
两次设计
并不是真的要去做两次设计,而是希望,在设计一个模块或者组件功能的时候,仔细的思考一下是否有更高的设计方案。
考虑多种设计,考虑这种设计和对比弱点,将有益的它们具有其他设计的功能,在对备选方案进行粗略设计后,列出每个利弊。
"两次设计"方法不仅可以改善您的设计,而且还可以提高您的设计技能,设计和比较多个项目的过程方法将教您有关设计更高或者更坏的因素
为什么写注释
注释是抽象的基础,抽象的目的是隐藏复杂性;抽象是简化的实体视图,其中保留了基本信息,如果用户必须阅读方法的代码,那么那么注释可以帮助它了解实体抽象。
说服你注意的三件事情
① 好的评论可以在总体上产生很大不同的软件质量
② 写好评论并不难。
③并且(这可能很难相信)写注释实际上很有趣;
文档可以通过开发人员提供它们所需要的信息来减少认知负担进行更改,并使开发人群易于忽略以下不相关的信息,好的文档可以阐明依赖关系,并且它填补了空白以消除晦涩之处。
注释应该描述代码中没有明显的内容(+1)
编写注释的原因是,使用编程语言编写的语句,无法捕捉到编写代码开发人员头脑中重要信息,而将其写在注释中,即可让后来的开发者更快了解功能代码,也可以提醒现有开发人员。
选择命名
给变量、类、模块、文件起名字很难,真的很难。好的命名能使得软件设计更容易理解,差的命名更容易产生Bug
修改现有代码
对于修改代码,同样面临着"战术性编程" 和战略性编程的挑战,是以最少的修改完成任务,还是以重新设计使得系统更合理的角度进行长线投资,需要仔细思考。
一致性
一致性在软件设计里很重要,包括:
① 命名
② 代码风格
③ 接口
④ 设计模式
⑤ 常量
可以使用以下方法来保证一致性
① 文档
② 利用工具/代码审查来强制
③入乡随俗
④ 不要随便改变命名约定