我的发展和维持一个大(500k+LOC)它应用程序的2.0.这是多用户,目前部署在大约15机。开发该系统正在进行(可以被认作为一个永久测试),那里有很少做到保护用户从潜在的新的错误,可能介绍了在每周一次的建立。

为此原因,除其他外,我发现自己变得非常依赖编辑并继续在调试器。它有助于不仅与错误的狩猎和错误定,但在某些情况下,与正在进行的发展。我觉得它非常有价值的,能够执行新编写代码范围内的一个运行程序-有没有必要重新编译并增加一个具体入境点的新代码(具有添加虚拟的菜单选项,按钮,等到程序和记忆,以消除他们之前的下一个生产建立)-一切都可以尝试和检验在现实的时间没有停止的过程。

我保持编辑并继续在如此高的方面,我积极编写代码是完全兼容。例如,我可避免:

  • 匿名的方法和内联代表(除非完全不可能重写)
  • 通用的方法(除非在稳定、不变的实用程序代码)
  • 针对项目'的任何CPU'(即从来没有执行中的64位)
  • 初始化领域的宣言》(初始移动到constructor)
  • 写枚举块,使用 yield (除非在实用程序代码)

现在,我充分认识到,新的语言功能在C#3和4都很大程度上不符合编辑并继续(lambda表达皇宫等)。这是一个原因为什么我拒绝运动的项目达到一个新版本的框架。

我的问题是,它是否有良好做法,以避免使用这些更高级的构造有利于代码,这是非常,非常容易调试?是否有合法性,在这种发展,或者是浪费?此外,重要的是,任何这些结构(lambda表达的,匿名的方法,等等)承担的表现/存储费用,以及编写、编辑并继续兼容的代码可以避免?...或者做的内部运作C#编译器使这类高级结构的运行速度快于手写的,'扩大的'代码?

有帮助吗?

解决方案

而不想要老生常谈的声音-它是好的做法编写部/一体化试验,而不是依赖编辑-继续。

这样,你付出的努力的一次,而每一个其他时间是'自由'的...

现在我不建议你追溯编写单位为所有你的代码;相反,每次需要解决的一个错误,开始通过编写测试(或更常见的多次试验)就证明了这一修复。

作为@Dave Swersky提到的意见,Mchael羽毛'书, 工作有效地与传统的代码 是一个很好的资源(这是遗留5分钟后你写的吗?)

所以,是的,我认为这是一个错误,以避免新C#contructs有利于允许编辑和继续;但我也认为这是一个错误采用新的结构,只是为了它,尤其是如果它们导致更难理解码。

其他提示

我爱'的编辑和继续'。我发现它是一个巨大的推动因素互动的发展/调试和我也觉得很恼人的时候它不工作。

如果编辑和继续'艾滋病您的发展方法,然后通过各种手段作出选择,以便于它,同时铭记值的你放弃。

我的一个讨厌的是,编辑任何一个功能与氧表休息'的编辑和继续'。如果我行过它足够我可以写出来的lambda表达。我在围栏与lambda表达方式。我可以做一些事情更快与他们但他们没有救我的时间,如果我写出来后。

在我的情况下,避免使用氧表达的时候我真的不需要。如果他们在我的方式可以包装在一个功能,这样我可以编辑和继续'的代码使用它们。如果他们是无偿的,我可以写出来。

您的方法不需要黑色和白色。

想要澄清这些事情有点

它是好的做法,以避免使用这些更高级的构造有利于代码,这是非常,非常容易调试?

编辑并继续是不是真的调试,它是发展中国家。我做出这一区分,因为新C#特点是非常可调试.每个版本的语言增加了支持调试用新的语言功能,以使他们尽可能容易调试。

一切都可以尝试和检验在现实的时间没有停止的过程。

这个声明是一种误导。这有可能与编辑,并继续核查的变化修复了一个非常具体的问题。它是很难核实的改变是正确的,并不打破其他问题。即由于编辑和继续不修改的二进制文件的磁盘,因此不允许的项目,例如单元的测试。

总体来说是的,我认为这是一个错误,以避免新C#contructs有利于允许进行编辑并继续。编辑并继续是一个伟大的功能(真的很喜欢它当我第一次遇到它在我的C++天)。但它的价值作为一个生产服务器助手不作为producitivy收益的新C#特恕我直言。

我的问题是,它是否有良好做法,以避免使用这些更高级的构造有利于代码,这是非常,非常容易调试

我认为,任何时间你都是强迫自己写的代码是:

  1. 低表现
  2. 重复(来自避免一般方法)
  3. 非便携式(从来不调试和测试64位??!?!?)

你们是加入到你的总体维修费用远远超过损失的"编辑和继续"功能,在调试器。

我会写的最好的代码可能的,不是代码,使得一个特征IDE的工作。

虽然没有什么本质上是错误的用你的方法,它不会限制你的量表现的理解的环境。你的代码成为一个反思的 它的 能力,没有的语言的,因此你整体价值发展中世界减少,因为你们保持自己回到学习其他提高生产率的技术。避免了皇宫有利于编辑并继续感觉像一个巨大的机会成本以我个人的,但矛盾的是,你必须获得一些经验,与这之前你可以感觉到这种方式。

此外,正如已经提到的其他答案、单元测试你的代码中删除 需要 运行将整个应用所有的时间,并因此解决你的难题以不同的方式。如果你不能击中IDE和试验,只是在3行代码你关心的人,你这样做太多的工作期间的发展。

你真的应该介绍继续整合,这可以帮助你找到并消除错误之前部署的软件。特别是大型项目(I考虑500k相当大的)需要某一类验证。

http://www.codinghorror.com/blog/2006/02/revisiting-edit-and-continue.html

关于具体问题:不要避免这些结构并不依赖于你的疯狂试技能尽量避免错误在所有(部署的软件)。编写单元的测试,而不是。

我也曾在非常大的永久性测试的项目。

我已经使用匿名方法和内联代表保留一些相对简单位使用一种逻辑靠近他们的唯一地点的使用。

我使用了通用方法和课程用的再利用和可靠性。

我已经初始化课程在构造为全的程度,尽可能保持类变量和消除可能性的错误引起的对象无效的国家。

我用枚举块量减少代码需要建立一个数流的几行。

所有这些都有助于维持一个大型的快速变化的项目在一个可靠的国家。

如果我不能编辑并继续,我的编辑和重新开始。这要花我几秒钟的大部分时间,一两分钟的讨厌情况。它的价值时,更大的能力来理解码和更大的可靠性通过再利用节省了我。

有很多我会做到使其更易于发现错误,但如果它将使它更加容易有错误。

你可以试试 测试驱动的发展.我发现它很有用的,以避免使用调试器。你开始从一个新的试验(例如单元测试),那么你只有运行该单元的测试,以检查你的发展-你不需要整个运行的应用所有的时间。这意味着你不需要编辑并继续!

我知道方的当前时髦的词,但这真的对我的作品。如果我需要使用调试,我把它作为一个人失败)

依靠编辑和Cont.听起来好像有很少的时间花在设计新功能,让我们单独单元的测试。这是我找到是因为你很可能最终做了很多的调试和错误固定的,有时你的错误的修正造成更多的错误,对吗?

然而,这是非常难判断是否应该或不应该使用的语言功能或不行,因为这也取决于其他许多因素:项目的请求数,释放最后期限,队伍的技能、成本码的可管理性之后重构,仅举几例。

希望这可以帮助!

这个问题你似乎有的是:

它需要很长时间才能重建你的应用程序, 启动它再次得到比特 UI你的工作。

如大家所说的那样,单元的测试,将帮助减少的时候,你已经运行你的应用程序,以查/修正问题上没有UI码;但是他们不帮助等问题的布局。

在过去我写了一个测试的应用程序,很快就会负荷UI我的工作和填写虚拟数据,以便减少周期的时间。

分离出来无UI码进入另类,可以测试的单元的测试,将允许你这样做使用的所有C#构造的那些类别。然后你可以限制构造中使用的用户界面代码。

当我开始写大量的单元的测试,我使用的"编辑并继续"去了,我如何几乎没有使用它除了UI代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top