Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么时候停止干涸代码?_Ruby On Rails_Ruby_Dry_Design Principles - Fatal编程技术网

Ruby on rails 什么时候停止干涸代码?

Ruby on rails 什么时候停止干涸代码?,ruby-on-rails,ruby,dry,design-principles,Ruby On Rails,Ruby,Dry,Design Principles,所以干涸代码应该是件好事,对吧?在我所从事的一个项目中,有一种情况是,某些模型/实体或多或少都是相同的,除了它们被使用的环境。也就是说,每一个这样的实体都有一个标题、描述、标签、用户id等其他属性。因此,它们各自控制器中的积垢动作看起来非常相似 我的经理争辩说,它重复了代码,需要进行干燥处理。因此,他提出了CRUD ruby模块,当included处理所有这些实体的控制器的CRUD操作时。但最终,简单性受到了损害。代码失去了可读性,因为每个“东西”都被命名为“对象”。调试变得困难,干涸代码的整个

所以干涸代码应该是件好事,对吧?在我所从事的一个项目中,有一种情况是,某些模型/实体或多或少都是相同的,除了它们被使用的环境。也就是说,每一个这样的实体都有一个标题、描述、标签、用户id等其他属性。因此,它们各自控制器中的积垢动作看起来非常相似

我的经理争辩说,它重复了代码,需要进行干燥处理。因此,他提出了CRUD ruby模块,当
include
d处理所有这些实体的控制器的CRUD操作时。但最终,简单性受到了损害。代码失去了可读性,因为每个“东西”都被命名为“对象”。调试变得困难,干涸代码的整个过程也就失去了意义


这只是一个案例。其中有好几个地方的代码干涸导致了复杂的、难以调试的代码。所以问题是,我们什么时候才能停止干涸代码?因为不是每次你意识到代码已经失去了简单性(通常代码作者从来没有意识到代码的简单性已经失去)。此外,如果我们必须在简单性和干涸的代码之间进行选择,那么我们应该选择什么呢?如果出现这样的情况,你只能得到它们中的任何一个。

据我所知,如果干涸的代码导致了简单性的丧失,那么我们正在做一些非常错误的事情。我认为,我们应该干涸那些重复的、只有一个责任的代码。如果代码职责不同和/或实体的抽象无法命名,则我们不会重复代码。代码模式可能会重复,但它是一个完全不同的代码,有自己的责任。如果干涸会导致代码模糊,那么您可能正试图干涸具有类似模式的不同职责的代码,这并不是一个好的实践。干燥应该增强而不是抑制它。可读性和可维护性是好代码的两个最重要的特性。不幸的是,有时必须做出妥协。这是一个平衡的问题,不是每个人都会同意


我自己也倾向于你的观点。如果这意味着代码更容易理解,我宁愿有一些明显的重复。

至于“调试”问题,我习惯于创建这样一个“基类”来包含一个补充字段。此字段是一个简单的字符串,用于标识派生最多的类(因此从一个构造函数传递到另一个构造函数)。然后每一条消息都会打印这个字段+对象id“realtype[id]”,一切都会突然变得更容易调试

现在开始晾干

有两样东西需要晾干:

  • 建立等级制度
  • 使用泛型代码
现在应该很好地理解第一点。类的层次结构意味着是一种关系。如果两个类具有相似的行为,但在其他方面功能不相关,则它们不应属于同一层次结构。这只会让糟糕的维护人员感到困惑,并损害可读性

第二点可以更频繁地使用,尤其是脚本语言。对于前面的示例,我认为不需要类的层次结构,您可以简单地定义通用方法,这些方法将采用不同的类(为不同的业务建模)并统一处理它们。这样可以避免重复(枯燥),但不会牺牲可读性(imho)

我的2个CT。

如果有人都直截了当地告诉我,我的代码需要晾干,我可能会认为这是一个信号,表明他们要做的任何其他事情都将是非常牵强的

话虽如此,编写代码的简单性(惰性)和代码本身的简单性(优雅)之间也有区别。不过,我同意这是一种平衡。我有一次也遇到过这种情况(在PHP中,但这让我想起了你的困境):

$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 />";