扔软件永远不行吗?
Joel concludes公司永远不应该丢弃软件。
我努力成为一名优秀的小程序员并遵守这条规则。我已经进入了一个由一个人经营的五年历史的项目。它充满了反模式,通常设计不佳。大多数问题来自具有内联动态SQL的数据层。
我可以重新收集需求并使用OO,设计模式和现代.NET技术构建这个应用程序。易于管理和可饮用 在小型应用程序中,如果出现这些问题,我们应该遵循Joel的建议吗?
这个问题可能因为主观而被抛弃,但我发现这对我作为程序员的工作至关重要。
答案 0 :(得分:11)
乔尔所得到的是,如果你把所有东西扔掉并从头开始,那么你就要投入多年的工作,而不保证重写会比你现有的要好得多。
不要只关注重写,而应考虑一次重构一个应用程序的实用性。而不是内联SQL,或许可以考虑创建一个新的数据层,可能是基于“更好”的方法,如LINQ。然后,您可以一次迁移到该新图层一个函数。通过这种方式,您将向前迈向更好的代码库目标,而不必丢弃以前多年的工作。
答案 1 :(得分:5)
我的建议是这样的。如果它有效,请不要弄乱它,直到您的应用程序中的下一个重要版本。然后你认为必要的重构。我们在公司面对同样的事情,我们通常按照我描述的方式处理问题。
不丢弃旧代码,坏代码或不再相关的代码,IMO是荒谬的。除非代码中的关键部分根本无法轻易复制。
答案 2 :(得分:4)
大多数问题来自带有内联动态SQL的数据层。
只要UI和数据之间存在某些区别,这不一定是个问题。不要损害内联SQL - 只要它是参数化的,它就是一种非常可行的方法。
回答问题;我会质疑用于报废的技术原因是什么。如果你能用真实条款(理想情况下是$£¥)来证明这一点,那就太棒了。但不要仅仅因为你不喜欢它的外观。我之前已经废弃了代码,但尝试以无回归的方式进行操作可能是曲折的。
至于用户;做得对,他们并不真的需要知道有变化,但即使你想改变用户界面 - 大多数人都很灵活,很乐意适应新的用户界面。
答案 3 :(得分:3)
而不是把所有东西扔出去并从头开始我会在我去的时候重构它,进行单元测试支持的小改动。从头开始重写它的成本很少值得。
答案 4 :(得分:2)
我会用强制性的插件来查看Michael Feathers的Working Effectively with Legacy Code。他为逐步重构提供了强有力的理由,重点是让遗留代码得到测试。这本书有点过时了,但是,你的代码也是如此。我发现它非常有用,因为它帮助我做出了一个概念上的转变,改变了我接近所谓的“棕色领域”项目的方式。如果要求开发商改造房屋,他很少建议推土机结构并从头开始;该项目过于昂贵,而且结构不再可用的时间太长。
答案 5 :(得分:1)
我认为你所描述的软件并没有被严格删除,但可能需要进行重构而不是所有认可,可能是在首先编写一堆测试之后,确保在此过程中没有任何中断。
那时,它被丢弃了吗?我会说是的,虽然最后的EXE名称和可见操作可能是相同的。简而言之,我认为这可能更多地是面对现实世界限制的语义和实用主义,而不是实际的最佳实践。
答案 6 :(得分:1)
这就是你想保留旧版本的情况;)
在您使用旧版本的确切错误复制新系统之前,用户将要求旧应用程序返回...许多用户将看到一些错误作为功能(如“快速关闭选项”或您遇到的任何怪癖)
答案 7 :(得分:0)
当客户对产品“满意”时,通常很难为完全重写做出商业理由。我的建议是在开发新功能时重构,以便慢慢移动到所需的架构。这说起来容易做起来难,但对你所描述的项目有意义。