Ruby on rails 什么时候停止干涸代码?
所以干涸代码应该是件好事,对吧?在我所从事的一个项目中,有一种情况是,某些模型/实体或多或少都是相同的,除了它们被使用的环境。也就是说,每一个这样的实体都有一个标题、描述、标签、用户id等其他属性。因此,它们各自控制器中的积垢动作看起来非常相似 我的经理争辩说,它重复了代码,需要进行干燥处理。因此,他提出了CRUD ruby模块,当Ruby on rails 什么时候停止干涸代码?,ruby-on-rails,ruby,dry,design-principles,Ruby On Rails,Ruby,Dry,Design Principles,所以干涸代码应该是件好事,对吧?在我所从事的一个项目中,有一种情况是,某些模型/实体或多或少都是相同的,除了它们被使用的环境。也就是说,每一个这样的实体都有一个标题、描述、标签、用户id等其他属性。因此,它们各自控制器中的积垢动作看起来非常相似 我的经理争辩说,它重复了代码,需要进行干燥处理。因此,他提出了CRUD ruby模块,当included处理所有这些实体的控制器的CRUD操作时。但最终,简单性受到了损害。代码失去了可读性,因为每个“东西”都被命名为“对象”。调试变得困难,干涸代码的整个
include
d处理所有这些实体的控制器的CRUD操作时。但最终,简单性受到了损害。代码失去了可读性,因为每个“东西”都被命名为“对象”。调试变得困难,干涸代码的整个过程也就失去了意义
这只是一个案例。其中有好几个地方的代码干涸导致了复杂的、难以调试的代码。所以问题是,我们什么时候才能停止干涸代码?因为不是每次你意识到代码已经失去了简单性(通常代码作者从来没有意识到代码的简单性已经失去)。此外,如果我们必须在简单性和干涸的代码之间进行选择,那么我们应该选择什么呢?如果出现这样的情况,你只能得到它们中的任何一个。据我所知,如果干涸的代码导致了简单性的丧失,那么我们正在做一些非常错误的事情。我认为,我们应该干涸那些重复的、只有一个责任的代码。如果代码职责不同和/或实体的抽象无法命名,则我们不会重复代码。代码模式可能会重复,但它是一个完全不同的代码,有自己的责任。如果干涸会导致代码模糊,那么您可能正试图干涸具有类似模式的不同职责的代码,这并不是一个好的实践。干燥应该增强而不是抑制它。可读性和可维护性是好代码的两个最重要的特性。不幸的是,有时必须做出妥协。这是一个平衡的问题,不是每个人都会同意
我自己也倾向于你的观点。如果这意味着代码更容易理解,我宁愿有一些明显的重复。至于“调试”问题,我习惯于创建这样一个“基类”来包含一个补充字段。此字段是一个简单的字符串,用于标识派生最多的类(因此从一个构造函数传递到另一个构造函数)。然后每一条消息都会打印这个字段+对象id“realtype[id]”,一切都会突然变得更容易调试 现在开始晾干 有两样东西需要晾干:
- 建立等级制度
- 使用泛型代码
$checked=($somevariable)?“checked=\“checked\:”;
回声“;
$checked=($someothervariable)?“checked=\“checked\:”;
回声“;
这甚至不是我正在处理的一个很好的例子。本质上,因为它是一个无线电输入,所以两个输入都需要某种方式来知道要插入哪个。我知道它有你老板可能会称之为“潮湿”的问题,所以我绞尽脑汁,试图想出一些优雅而中肯的解决方案。最后,我把它展示给一位高级开发人员,他说:“不,一切正常,它做了它需要做的事情。它只是多了一行。”
有人提醒我,担心这件事对我的项目造成的伤害大于帮助,这让我松了一口气,但与此同时,我仍然对他对一个基本原则如此漫不经心感到失望(尽管我确信这不是他的原则之一)
因此,虽然我同意你的观点,但你的经理可能只是为了做一些事情,只有当我们努力想出更好的方法时,我们才能得到更好的语言,如Ruby和Python,以及更酷的库,如Jquery
基本上,如果下周你突然有了70件而不是2件?如果你老板的东西让你抓狂,那他是对的。如果是同样多的麻烦(在代码或执行中),他就错了。但这并不意味着没有比保持简单更好的答案,因为这只是几件事。干式原理的目的是帮助提高代码的“质量” 如果更改没有改善代码的质量,那么是时候停止了。 判断这一点的能力来自经验。随着需求的变化,重构代码的最合适方法也会发生变化,因此不可能让所有东西都变得完美——至少你需要先冻结需求 最小化代码的大小通常不应该是一个考虑因素
$checked = ($somevariable) ? "checked=\"checked\"" :"";
echo "<input type="radio" $disabled_checked />";
$checked = ($someothervariable) ? "checked=\"checked\"" :"";
echo "<input type="radio" $checked />";