相关疑难解决方法(0)

何时从头开始重写代码库

我想回到Joel Spolsky关于永远不会从头开始重写代码的文章.总结一下他的论点:代码不会生锈,虽然在许多维护版本发布之后可能看起来不太好,但如果它有效,它就可以了.最终用户并不关心代码的漂亮程度.

你可以在这里阅读文章:你不应该做的事情

我最近接管了一个项目,在查看了他们的代码之后,它非常糟糕.我立刻想到了我之前构建的原型,并明确声明它不应该用于任何生产环境.但当然,人们不听.

代码是作为一个网站构建的,没有任何关注点,没有单元测试和代码重复.没有数据层,没有真正的业务逻辑,除非你在App_Code中计算一堆类.

我已向利益相关方提出建议,虽然我们应该保留现有代码,并进行错误修复发布和一些小功能发布,但我们应该立即开始重新编写测试驱动开发并明确分离关注点.我正在考虑使用ASP.NET MVC路由.

我唯一关心的是从头开始重写可能需要的时间.这并不是完全复杂的,有会员资格的磨坊网络应用程序.

你们有没有遇到类似的问题?你采取了什么特别的步骤?

更新:

那么......我最终决定做什么?我采用了马特的方法并决定重构许多领域.

  • 由于App_Code变得相当大,从而减慢了构建时间,因此我删除了许多类并将它们转换为类库.
  • 我创建了一个非常简单的数据访问层,它包含所有ADO调用,并创建了一个SqlHelper对象来执行这些调用.

  • 我实现了一个
    更简洁的清洁日志解决方案.

虽然我不再参与这个项目[资金,政治,等等],但我认为它让我对一些项目的编写能力有了很大的了解,并且开发人员可以采取措施使事情变得更加清晰,可读和公正随着时间的推移逐渐变小,逐渐变平.

architecture testing tdd

61
推荐指数
7
解决办法
1万
查看次数

重写遗留代码

我的部门目前负责维护一个相当大的COBOL代码库.我们想知道如何添加新功能以满足业务需求.COBOL程序员现在很难找到,我们也认为使用Java或C#等更现代的语言可以提高工作效率.

我们认为我们有四种选择:

  1. 从头开始重写所有内容,将旧应用程序留给自己,直到它准备好被替换
  2. 从头开始重写所有内容,让一些人维护旧应用程序,以便在构建新应用程序时满足新的业务需求
  3. 用现代语言编写所有新功能,并找到一些方法将新代码与旧功能集成.
  4. 继续维护旧的应用程序.

您认为我们最好的选择是什么?为什么?

legacy refactoring maintenance cobol

18
推荐指数
5
解决办法
3720
查看次数

这是"十分之一"的时间重写吗?

如果可以避免,我非常反对重写应用程序.我理解10次中9次的规则,重构更好,但是我可能是10次中的一次,而我正在寻找那条线.

目前的情况是:

  • 我接手了VB6/SQL应用程序的维护.
  • 代码总行数为75-100k(代码隐藏,模块和类).
  • 最初的开发人员离开了,所以这只是我,并且没有机会扩展团队,至少在几年内.
  • 程序没有架构(只是在代码隐藏形式的纯文本中直接进行SQL调用).
  • 不试图遵循DRY或OAOO原则.
  • 数据库有一些主键,但没有外键.
  • 在这个系统到位之前,所有东西都是用大型电子表格管理的,所以这个系统确实比他们拥有的东西有了很大的改进,但却没有做到他们想象的那样.
  • 我能够自己编写一些工具来用常量和查找替换表名和列名的所有文字实例,并且我编写了一个快速代码生成脚本来从数据库中生成这些常量和查找,所以现在我可以安全地进行数据库更改并查看破坏的所有地方 我已经开始将数据库"边缘化"规范化,但它就像3%的方式.
  • 没有单元测试,所以每次我更改数据库时,我基本上都要重写其上的任何逻辑,我使用这两个版本来比较功能并确保它们是相同的.到现在为止还挺好.
  • 我开始只是试图修复关键的错误来阻止流血,我可以肯定地说,这大部分已经完成了,所以现在我踩了一会儿来看看大局.
  • 管理层对他们的期望是支持和合理的.
  • 长期目标是将其转换为.NET无论如何......

所以,我正在权衡这些选择:

  1. 继续规范化数据库并在我去的时候修改VB6应用程序(最终是一块一块地重写)
  2. 将VB6置于仅维护状态(无新功能),一次选择一个功能模块,并在规范化数据库结构之上重写.NET中的该部分.

我的想法是,如果我选择选项1,那么最后我只有一个VB6应用程序,他们仍然想要升级到.NET,我已经研究过它,这是昂贵和耗时的,甚至使用你的工具我还会得到一些有点像弗兰肯斯坦的东西.如果我选择选项2,我相信我可以尽快完成,我会直接跳到目标技术.

在我的规范化过程中我已经重写的小规模部分中,结果是已经存在的改进模块,因此在重写期间会添加值.

现有的应用程序,除了它的所有缺陷,是一个很好的讨论点.使用它的人可以告诉我什么对他们起作用,什么不起作用,所以那里肯定有很多价值.

那么,这是否有资格成为"十分之一"时间之一?

.net vb6 rewrite

13
推荐指数
3
解决办法
587
查看次数

用于发现.NET代码依赖关系的工具(不是VS2010)

鉴于一个非常大的.NET代码库.源中的某些部分和二进制文件中的某些部分.这都是.NET代码.我想有一个工具来发现代码库中的依赖项.按装配和按类型.以图形形式显示依赖关系是非常好的.
我想要:实例化图,重新生成图,调用图,类型依赖图.

对于一个实例,从一个图表中获取一个类并从他的角度获得所有类型的依赖关系,并且能够按汇编/ namaspace/etc进行过滤.

我知道反射器可以做到.VS2010旗舰版可以做到这一点.但它们都有一些缺点:

  • Reflector是一个很好的工具,但它的依赖可视化设施非常有限
  • VS2010太懒了.它看起来像玩具不是一个成熟的工具(我的意思是它的图表设施).

ps已经问过某个地方?好吧,把我指向那个地方.TNX.

.net dependencies visualization

6
推荐指数
2
解决办法
2580
查看次数