我想回到Joel Spolsky关于永远不会从头开始重写代码的文章.总结一下他的论点:代码不会生锈,虽然在许多维护版本发布之后可能看起来不太好,但如果它有效,它就可以了.最终用户并不关心代码的漂亮程度.
你可以在这里阅读文章:你不应该做的事情
我最近接管了一个项目,在查看了他们的代码之后,它非常糟糕.我立刻想到了我之前构建的原型,并明确声明它不应该用于任何生产环境.但当然,人们不听.
代码是作为一个网站构建的,没有任何关注点,没有单元测试和代码重复.没有数据层,没有真正的业务逻辑,除非你在App_Code中计算一堆类.
我已向利益相关方提出建议,虽然我们应该保留现有代码,并进行错误修复发布和一些小功能发布,但我们应该立即开始重新编写测试驱动开发并明确分离关注点.我正在考虑使用ASP.NET MVC路由.
我唯一关心的是从头开始重写可能需要的时间.这并不是完全复杂的,有会员资格的磨坊网络应用程序.
你们有没有遇到类似的问题?你采取了什么特别的步骤?
更新:
那么......我最终决定做什么?我采用了马特的方法并决定重构许多领域.
我创建了一个非常简单的数据访问层,它包含所有ADO调用,并创建了一个SqlHelper对象来执行这些调用.
我实现了一个
更简洁的清洁日志解决方案.
虽然我不再参与这个项目[资金,政治,等等],但我认为它让我对一些项目的编写能力有了很大的了解,并且开发人员可以采取措施使事情变得更加清晰,可读和公正随着时间的推移逐渐变小,逐渐变平.
我的部门目前负责维护一个相当大的COBOL代码库.我们想知道如何添加新功能以满足业务需求.COBOL程序员现在很难找到,我们也认为使用Java或C#等更现代的语言可以提高工作效率.
我们认为我们有四种选择:
您认为我们最好的选择是什么?为什么?
如果可以避免,我非常反对重写应用程序.我理解10次中9次的规则,重构更好,但是我可能是10次中的一次,而我正在寻找那条线.
目前的情况是:
所以,我正在权衡这些选择:
我的想法是,如果我选择选项1,那么最后我只有一个VB6应用程序,他们仍然想要升级到.NET,我已经研究过它,这是昂贵和耗时的,甚至使用你的工具我还会得到一些有点像弗兰肯斯坦的东西.如果我选择选项2,我相信我可以尽快完成,我会直接跳到目标技术.
在我的规范化过程中我已经重写的小规模部分中,结果是已经存在的改进模块,因此在重写期间会添加值.
现有的应用程序,除了它的所有缺陷,是一个很好的讨论点.使用它的人可以告诉我什么对他们起作用,什么不起作用,所以那里肯定有很多价值.
那么,这是否有资格成为"十分之一"时间之一?
鉴于一个非常大的.NET代码库.源中的某些部分和二进制文件中的某些部分.这都是.NET代码.我想有一个工具来发现代码库中的依赖项.按装配和按类型.以图形形式显示依赖关系是非常好的.
我想要:实例化图,重新生成图,调用图,类型依赖图.
对于一个实例,从一个图表中获取一个类并从他的角度获得所有类型的依赖关系,并且能够按汇编/ namaspace/etc进行过滤.
我知道反射器可以做到.VS2010旗舰版可以做到这一点.但它们都有一些缺点:
ps已经问过某个地方?好吧,把我指向那个地方.TNX.
.net ×2
architecture ×1
cobol ×1
dependencies ×1
legacy ×1
maintenance ×1
refactoring ×1
rewrite ×1
tdd ×1
testing ×1
vb6 ×1