背景:
一位美术老师曾经给我一个设计问题,只用3行画虎。我的想法是,我研究一只老虎并学习三条线来吸引人们仍然能够说出它是一只老虎。
这个问题的解决方案是从完整的老虎画开始,然后删除元素,直到找到最容易被识别为老虎的三个部分。
我喜欢这个问题,因为它可以应用于软件开发等多个学科,特别是在消除复杂性方面。
在工作中,我处理的是维护一个被黑死的大型软件系统,并且变得无法维护。我的工作是消除过去开发人员造成的繁琐复杂性。
问题:
是否存在消除软件系统复杂性的固定流程 - 一种应用于问题的简化流程模板?
答案 0 :(得分:8)
查看Martin Fowler及其http://www.refactoring.com/网站上的 Refactoring 一书。
Robert C. Martin的清洁代码是另一个降低代码复杂性的好资源。
不幸的是,与虎图的类比可能效果不佳。只有三条线,观众可以想象其余的。在软件系统中,所有细节都必须存在。如果不删除必要的东西,通常不会带走太多。
答案 1 :(得分:6)
查看书籍Anti-Patterns,阅读一本关于从糟糕(或适应不良)设计转向更好的整个主题的精心编写的书。它提供了从软件系统中常见的大量问题中恢复的方法。然后我会支持克里斯托弗的Refactoring建议作为重要的第二步。
答案 2 :(得分:4)
虽然智力刺激,但细节去除的概念并不能很好地(至少原样)用于软件程序。原因在于人类可以接受模糊输入来重新评估绘图,从而由“填充空白”的CPU很难对程序进行重新评估。另一个更微妙的原因是节目传达了一个 spaciotemporal 叙事,而绘画基本上是空间的。
因此,使用软件可以减少近似的空间,并且可以直接删除代码的特定部分。从来没有,重构是操作关键字,有时甚至适用于他们最笨拙的遗产。然而,这门学科是艺术的一部分科学,并没有我所知道的很多“快速技巧”。
编辑:然而,对于遗留代码,人们并非完全无助。例如,请参阅Alex Baranosky和Kristopher Johnson的答案中提供的优秀书籍参考。这些书提供了许多有用的技巧,但总的来说,我坚持认为重构非平凡的遗留代码是一个需要艺术和科学(以及耐心,无情和温柔;-))的迭代过程。
答案 3 :(得分:4)
查看书籍Working Effectively with Legacy Code
涵盖的主题包括
本书还包括一个包含二十四个依赖于依赖项的技术的目录,这些技术可以帮助您独立处理程序元素并进行更安全的更改。
答案 4 :(得分:1)
这是一个加载的问题: - )
首先,我们如何衡量“复杂性”?如果没有任何先决条件,可能很难证明任何“减少”项目的合理性。
第二,完全是你的选择吗?如果我们可以举一个例子,假设在某些代码库中,使用“继承”的锤子来解决所有其他问题。虽然对某些情况使用继承是完全正确的,但它可能不适合所有情况。在这种情况下你是做什么的?
第三,可以证明程序的行为/功能因重构而没有改变吗? (当代码是运输产品的一部分时,这会变得更加复杂。)
第四,你可以从简单的事情开始,例如:(a)避免全局变量,(b)避免宏,(c)尽可能使用const指针和const引用,(d)在任何地方使用const限定方法这是合乎逻辑的事情。我知道这些不是重构技术,但我认为它们可以帮助您实现目标。
最后,根据我的拙见,我认为任何此类重构项目都是人为问题而不是技术问题。所有程序员都希望编写好的代码,但是好的和坏的看法是非常主观的,并且在同一个团队中的成员之间会有所不同。我建议为项目建立一个“设计惯例”(类似于C++ Coding Standards)。如果你能做到这一点,你就完成了。剩下的部分是修改不符合设计惯例的代码部分。 (我知道,这很容易说,但很难做到。祝你好。)