Mar*_*tin 7 design-patterns yagni
我发现自己一直都在打破这种模式.
YAGNI - 你不需要它
我只是一名初级开发人员,但我发现即使是高级开发人员也在做同样的事情.
"好吧,这个系统可能会使用它,而这个,所以让我们为它设计."
有时,我会抓住自己,但大多数时候我会狂奔.有没有人有任何关于坚持YAGNI的技巧,或者我在设计和编码时能做些什么来更好地执行这种设计模式?
Jus*_*ner 24
设计一些东西
......完全不同于
设计一些东西.
设计某些东西意味着您正在构建应用程序以便将来扩展,以备需要编写代码时(这很好......这意味着您可以使您的软件可扩展且易于维护).
设计一些东西意味着你现在正在写整篇文章......你是否认为任何人实际上都会使用它.这不一定是坏事,但它可能是浪费大量时间.
你要注意哪一个.
小智 8
这与完美主义有关.让它变得完美,让我们为所有可能的未来场景做好准备.
在决定需要的机会时,务实和清醒是有帮助的:然后回答"是"或"否".也许是不是.
除非有明确的证据表明它是需要的(它已经在议程中,它已被客户要求)并且您认为最好考虑当前设计中的未来功能,暂时不予考虑.
实施YAGNI是如此困难,因为我认为我们大多数人都被相反的问题所困扰,他们找到了一个过于复杂或脆弱的系统来重构我们想做的事情,但这可能会让他们更加深思熟虑. .寻找中间地带可能很艰难.
一般来说,如果你发现自己在想"它可能需要[xyz]",那么它应该明确地在你编码的内容中发挥作用.即使你不编码支持xyz,那么你应该以这样的方式进行编码,即重构xyz支持是可行的.然而,有时候这可能意味着制作比它严格需要的更通用的东西.知道在该路径上停留的位置可能只是与经验相结合的特定领域信息可以告诉您.
因为YAGNI是一个原则,而不是灵丹妙药
软件开发总是关于平衡许多要求.这不是要让一件事情做对,而是要让一件事情都不对.单凭YAGNII不会拯救你的屁股.
从这个意义上讲,YAGNI 可以避免以下陷阱:
平衡竞争要求很难.但这就是为什么 - 正如McConnell尖锐地指出的那样 - 软件开发就是工程学.
因为其他原则也是人,
其他原则原则 - 更基本的IMO - 是最少惊喜的原则和复杂性的封装:实体的公共接口/契约应该比它的实现更简单 - 否则,正确调用函数我我必须知道的比我自己需要做的更多.有时,这意味着您的实施需要完成.
一个例子(也许不是很好):
/// Estimates the time required to comlete the batch.
/// If the time cannot be estimated reliably, the return value is -1
/// \returns [double] estimated time in seconds
double EstimateDuration(Batch & batch);
Run Code Online (Sandbox Code Playgroud)
是一个简单的合同.OTOH,
/// Estimates the time required to comlete the batch.
/// If the time cannot be estimated reliably, the return value is -1.
/// This function does not support looping batches (right now, looping
/// batches only run under a servicve account with no UI, so it's not needed).
/// Also, when the moon is full, the return value is -1, but an estimate
/// is found in batch.JeffsEstimate. This value is used only by Jeff's core
/// build script which runs roughly once a month.
/// \returns [double] estimated time in seconds
double EstimateDuration(Batch & batch);
Run Code Online (Sandbox Code Playgroud)
是不是一个合同,这是imlementation的描述.(有人可能会争辩说,问题是由于过度热心的YAGNI还是仅仅是糟糕的设计 - 但也许这是因为你YAGNI完全设计了)
设计并不会伤害
敏捷的出现,"设计阶段"会有一些不好的名字.然而,要比没有计划更糟糕,你的计划确实是灾难性的.最大的危险不是真正糟糕的计划,而是试图预测每一个问题并改变要求.YAGNI在这里非常宝贵.
他们是高级的,毕竟 我不认识他们 - 他们的倾向可能是由于老派瀑布的灌输和对改变的恐惧.或者也许他们是老年人,因为他们知道自己的工作 - 他们已经了解了你现在比以后做什么部分,以及可以牺牲哪些部分来应对未来的不确定性.