一直为重复使用代码而编写代码是一条好的经验法则吗?或者,取决于您正在编写的组件的大小,是否可以更好地设计它以供重用,当它在上面花费的时间有意义的时候。什么是好的经验法则,花更多的时间在项目组件的分析和设计上,这些组件在以后可能需要或可能需要这一部分的其他事情上有“一定的可能性”。
例如,如果我需要项目X来执行A和B。A肯定需要为重用而编写,因为这样做是有意义的。B目前是一个非常具体的项目,我可以在几天内把它全部破解出来,按时完成这个项目,让每个人都称赞它是一个伟大的团队等等。或者,如果我们说的话,让我们花整整两个星期的时间来研究Y/Z可能需要做什么,并在B部分上花费大量的时间,因为有一天我们可能需要将它用于Y/Z项目(在那里可以实现节约)。
我可以想象,一个完美的世界将是一个精心设计的组合,它将特定于项目的组件和重用的架构组件结合在一起。然而,一些代码商店可能会觉得,为了在将来的某个时候使用它的意图,编写任何东西都是个好主意。
发布于 2011-12-27 11:39:23
什么是好的经验法则,花更多的时间在项目组件的分析和设计上,这些组件在以后可能需要或可能需要这一部分的其他事情上有“一定的可能性”。
对于上述情况,我的首选项是基于在我过去的一个项目中得出的估计:可重用的代码需要花费3到4倍的精力来编写(YMMV)。
鉴于上述,我倾向于避免为重复使用的设计,直到我有一个真正的理由。从这个意义上说,我非常强烈地遵循雅格尼。另一方面,当至少有一种重复使用的情况下,我尝试重新/设计它而不是重复代码--即使我对工作的简单计算仍然支持重复(2x的努力比3-4x) --猜测这种偏好与进一步维护的考虑有关。
例如,如果我需要项目
X来执行A和B。A肯定需要为重用而编写,因为这样做是有意义的。B目前是一个非常具体的项目,我可以在几天内把它全部破解出来,按时完成这个项目,让每个人都称赞它是一个伟大的团队等等。或者,如果我们说的话,让我们花整整两个星期的时间来研究Y/Z可能需要做什么,并在B部分上花费大量的时间,因为有一天我们可能需要将它用于Y/Z项目(在那里可以实现节约)。
在上述情况下,我会亲自为B进行快速黑客攻击。
唯一让我感到不舒服的是,如果这个决定没有留下任何痕迹(比如问题是什么,考虑了什么选择,决定是什么,以及为什么)。但是这真的很容易处理--我经常这样做:在你的问题跟踪器中注册它,描述事情,让它在时间允许的情况下处理。或者直到有时间准备其他的项目,Y/Z --当你可以在评估中包括两个星期的时候。
B --修复延期-努力估计2周发布于 2011-12-27 06:23:35
最佳实践是编写简洁易懂的代码,而不考虑重用的目的。一段好的代码总是可以找到它在未来的位置。您不需要以适合重用的方式专门编写代码。您所需要做的就是遵循好的设计原则和一些自我文档化的代码。这将使代码本身可重用。
发布于 2011-12-27 06:20:10
正如你已经指出的,这确实取决于平衡。在科学/经济学方面,您将评估您决策的两个方面:可重用代码与特定应用程序的攻击,并总结每一方的成本和收益,并考虑到任何概率值(例如,代码在其他任何地方实际需要的可能性)。在现实中,我们下意识地做这些计算(用常识、经验、直觉.)几乎每天都是。
从技术上讲,我们的设计应该始终是模块化和可重用的,但在很多情况下,就像您所说的“黑客”一样,每周需要半天才能编写与通用组件相对应的组件。在这种情况下,我会采取YAGNI原则的立场。
另一方面,如果你知道有80%-90%的可能性代码将再次被需要,这是有意义的和b)它不需要明显更多的时间来使它可重用,那么我建议继续进行设计,为可重用性.对于其他的所有事物,都有中间的灰色区域:)
而且,在过去,我在你的两种方法之间取得了成功。我有一些项目,从第一天起,某些功能就可以被重用,但是这样做会产生额外的成本。所以,我把所有的代码都放在了本地。在以后的工作中,当需要类似的功能时,我回到最初完成这项工作的项目,当时支付了将这些类包装到可重用模块中的额外费用。这样做几乎没有什么好处: 1)在需要之前,不需要额外的成本;2)当您做了一个可重用的组件时,您可以利用自己的知识,了解在特定应用的情况下,原始代码是如何工作的,并在将其引入“世界”之前根据需要修改它的设计。
在某些情况下,原始项目从未被修改过以使用新的v2.0可重用模块,因为原始代码已经起作用了,如果没有积极的开发,那么修改代码就没有意义了。在其他情况下,一旦对可重用组件进行了调优和改进,我们就返回并替换了自定义实现,但只有在定制实现实际上需要完成之后。因此,这一切的一个教训是:即使你“黑”或写自定义代码,也要花上一两个小时才能得到一个干净的界面。将来,如果您必须修改此代码,则该接口将使其更简单地删除自定义代码并将其替换为库调用。
https://softwareengineering.stackexchange.com/questions/127118
复制相似问题