`
webcode
  • 浏览: 6066034 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

五步为类瘦身

 
阅读更多

(http://drdobbs.com/cpp/230600127)


重构技巧和纪律是通往小精灵之岛的康庄大道。


我之前的文章讨论了在基础代码中使用小的类的好处和作用,我认为一个类的代码应当限制在50到60行。我陆续收到了许多回复,大部分类比了以前关于让函数变小以在一屏显示的法则。

虽然很感谢这些回复,但他们都忽略了决定性的一点。我并没有讨论函数,而是可能包含多个函数的类。编写一个只有60行大小的类会打击一些作者,因为要实现它的简单性却有许多的限制,可能并不值得去做。

但它恰恰是纪律,这样的行数规定,创建了非常明确理想的代码。相信正如其它回复所描述的那样,这条纪律并没有被保持,对于保持小类的标准技术也没有像我所期望的那样被广泛地了解。

让我们过一下这些技术原则。假设设计已经完成,这里只是如何写代码。或者是维护代码这种没有吸引力的活。

减少工作负担 (Diminish the workload)

首先运用的技术是单一职责法则(SRP),它强调一个类只做一件事。这件事有多大决定了这类将有多大。减少每个类的工作,然后用其它类把这些小的类正确地关联起来。

避免执着于表象 (Avoid primitive obsession)

这种执着会诱使我们使用原始的数据组织方式。也是被定义代码异味的一种。 如果有一个对象链表,那么这个链表应当定义为自己的类,并有有合适的命名。仅仅向其它类公开方法,这样避免它们去执行它们所不了解的行为。这个列表的目的非常清楚,这样的封装允许你在必要时变更数据结构。

(*这是一种数据抽象加工的能力。在使用OO时,如果形成类时过于直白,往往适得其反。可以参考下面的文章:"面向对象的分析和设计-抽象出对象")

减少成员数量 ( Reduce the number of class and instance variable )

数量可观的变量也是一种代码异味,它导致类做更多的事。后来的开发者也很难理清类做了什么。 通常,一些变量构成自然的组合,这就是一个新的类。同时将操作它们的方法也直接移到新的类。

子类化特殊情况 (Subclass special-case logic)

如果一个类含有很少使用的逻辑,就应决定是否可以将这部分逻辑移到子类中或者干脆放到一个新类中。OO中的多态就是一个典型的例子,它可以用来处理特殊的变化

不要重复自己 (Don't repeat yourself)

这个建议似乎与主题明显不相关。不过,即使编码者注意到这个法则,但是两个函数仍可能因为只有一点点不同而产生重复的代码。另外,他们可以在维护过程中检查重复代码的说明。与其它几条不同的是,其它建议都是纯技术性的,而DRY则是纪律中的纪律

使用这些工具基本上可以让你达成较小的类。要想了解它们在现实中的运用,可以看看我之前已经推荐了好几次了的书:Martin Fowler的<<重构>>,它在本质上是一本清理代码的技术手册,包含了一步一步的说明和演示代码。

回到我个人的经验,我发现我在重写代码时坚持挑剔的纪律时,大脑正在慢慢形成"肌肉记忆(Muscle memory)", 已经开始自动在开发类之前思考类的大小了,而现在在清理现有代码时也可以做到了。

— Andrew Binstock
Editor in Chief

alb@drdobbs.com

分享到:
评论

相关推荐

    字体库瘦身工具非常好用

    在IT行业中,字体库瘦身工具是一种非常实用的软件,它主要针对ttf字体进行质量优化,帮助用户将不必要的字符从字体包中剔除...通过深入理解ttf字体格式和瘦身过程,我们可以更好地利用这一工具,为我们的项目创造价值。

    SVN删除版本_瘦身

    SVN删除版本_瘦身SVN删除版本_瘦身SVN删除版本_瘦身SVN删除版本_瘦身

    360C盘瘦身 绿色单文件版,不想360全家桶的同学可以使用

    总之,360C盘瘦身工具以其绿色单文件的特性,为用户提供了一种简单易行的C盘空间管理方案。合理利用这款工具,可以有效维护系统盘的健康,提升电脑性能,为日常的工作和娱乐带来更好的体验。不过,任何优化工具都不...

    PSD文件瘦身脚本.rar

    PS文件瘦身脚本是一款为ps用户提供的文件瘦身脚本,这款脚本可以帮你快速缩小psd文件体积,有时候用ps做设计图层素材什么太多会导致psd文件过大,大家可以利用这款PS文件瘦身脚本给psd文件减肥,而且不影响图像质量...

    3dmax插件:文件瘦身脚本

    4. **压缩纹理**:在不影响视觉效果的前提下,将高精度的PNG或JPEG纹理转换为更小的格式,如TGA或DDS,可以进一步减小文件大小。 5. **删除隐藏对象**:有时,场景中可能包含被隐藏的物体或层,这些对象虽然在视图...

    CAD瘦身_CAD瘦身_源码

    在CAD(计算机辅助设计)领域,"CAD瘦身"通常指的是减少DWG或DXF文件的大小,以便于更快地传输、存储和管理这些文件。这个过程涉及到优化文件内容,删除不必要的元数据,压缩图像和图层,以及修复可能的冗余数据。...

    PPT文件瘦身工具

    PPT文件瘦身工具是一款专为优化和减小PowerPoint(PPT)文件大小设计的应用程序。在日常工作中,我们经常需要分享或传输PPT文件,尤其是含有大量图片、动画、图表或其他多媒体元素的文件,其体积往往较大,这在网上...

    PSD文件瘦身.zip

    "PSD文件瘦身"这一主题就是针对如何减小PSD文件大小的问题,以提高效率和便利性。以下是一些关键知识点: 1. **优化图层和组**:通过合并不必要的图层或减少图层数量可以缩小文件大小。将相似的图层合并为一个,...

    为您的Java应用瘦身

    一个jre几十兆,若是大工程,带个jdk也无所谓,如果你自己的类文件一共还没有1兆,就要带个几十兆的jre,你能接受么? 如果你想分发你的小程序,那么我们来进行jre瘦身吧! 看看我们的HelloWorld最小能多小。 jre...

    大型word 文件瘦身

    NXPowerLite是一款专为Microsoft Office文档瘦身的软件,它能够有效地减小Word、Excel和PowerPoint文件的大小,而不影响文件的原始质量和可读性。下面我们将从以下几个方面探讨如何利用NXPowerLite对大型Word文件...

    ps文件瘦身脚本.jsx

    ps文件瘦身脚本,减少PS运行内存,减少卡顿。

    3dmax文件瘦身,3dmax文件瘦身,

    3dmax文件瘦身,文件无缘无故变大,可以用这个

    QQ .db文件瘦身器

    这类文件是只增不减的,比如就算你删除了所有旧的信息, msg2.0.db仍然是原来大小。 因此做了这个工具,他的目的是主要是重新整理 msg2.0.db文件。让删除历史记录后的空间剩余出来,便于备份。 比方说我的 msg2.0....

    C盘瘦身工具

    标题中的"C盘瘦身工具"指的是专门用于清理Windows操作系统C盘空间的软件或程序。随着Windows系统的使用,系统盘(通常是C盘)会逐渐积累大量的临时文件、系统日志、更新缓存、用户文件等,导致空间逐渐变小,影响...

    2020中国健康瘦身行业发展监测及分析报告.zip

    《2020中国健康瘦身行业发展监测及分析报告》是一个深度研究我国健康瘦身行业的...通过这份报告,读者不仅能全面了解2020年中国健康瘦身行业的现状,还能洞察未来趋势,为相关企业和投资者制定战略决策提供有力依据。

    Windows7瘦身秘书 2.0x64

    "Windows7瘦身秘书 2.0x64" 是一款专为64位Windows7设计的优化工具,它具备以下核心功能: 1. 自动扫描与清理:软件能自动扫描并找出系统中的临时文件、日志、冗余注册表项等,一键清理,简单便捷。 2. 无用软件...

    win10 瘦身工具

    在Windows 10操作系统中,有时用户可能会遇到磁盘空间不足的问题,这时就需要对系统进行瘦身,以释放宝贵的存储空间。"win10 瘦身工具"就是针对这一需求而设计的,它包含了winsxs、dism以及rapr等组件,这些都是...

    iOS应用程序瘦身的静态库解决方案.docx

    因此,对iOS应用程序进行瘦身处理变得尤为重要。本文将重点探讨通过静态库解决方案实现可执行程序代码瘦身的方法。 #### 二、瘦身背景与必要性 1. **功能多样化与代码膨胀**:应用程序功能的增多通常伴随着更多的...

    PPT和PPTX瘦身软件

    标题中的“PPT和PPTX瘦身软件”指的是专门针对Microsoft PowerPoint创建的.ppt和.pptx文件设计的工具,其主要目的是减少这些文件的大小,以便于更轻松地分享、存储和传输。这种瘦身软件通常通过优化和压缩文件内的...

    360系统盘瘦身单独版

    360系统盘瘦身单独版是一款专为用户解决C盘空间不足问题的工具,由知名的360安全卫士团队研发。它集成了多种优化功能,旨在帮助用户清理、整理和优化系统盘,释放出宝贵的磁盘空间,提高电脑运行速度和整体性能。 ...

Global site tag (gtag.js) - Google Analytics