首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动重构的可维护性如何?

自动重构的可维护性如何?
EN

Software Engineering用户
提问于 2014-01-16 22:36:27
回答 3查看 109关注 0票数 1

Resharper提出让我转一圈:

代码语言:javascript
复制
foreach (JObject obj in arr)
{
    var id = (string)obj["Id"];
    var accountId = (double)obj["AccountId"];
    var departmentName = (string)obj["DeptName"];
    i++;
}

...into a LINQ语句.我默许了,这产生了这样的结果:

代码语言:javascript
复制
int i = 1 + (from JObject obj in arr let id = (string) obj["Id"] let accountId = (double) obj["AccountId"] select (string) obj["DeptName"]).Count();

天啊,把约沙法和天堂跳到摩尔加特!

这让我想知道,机器人变得比我聪明是否是件好事;这有多容易维护?答:它不是,因为我无法理解它;R#可能也把它转换成机器代码,尽管我能找到它。

不过,我不得不承认,这“很酷”。

在这种情况下,完美会在什么时候成为善的敌人?

更新

在第二次遍历时,R#告诉我这行LINQ,“局部变量”"i“从未使用过

让它移除它,这条线变成:

代码语言:javascript
复制
var arr = JsonConvert.DeserializeObject<JArray>(s);

嗯!这是不可能的;我以前把这些元素分解成单独的vars的原因是为了让我能够看到它们里面有什么:

代码语言:javascript
复制
MessageBox.Show(string.Format("Object {0} in JSON array: id == {1}, accountId == {2}, deptName == {3}", i, id, accountId, departmentName));

...but用那个消息框评论掉了,我想上面的内容还是更好的。

EN

回答 3

Software Engineering用户

发布于 2014-01-16 22:47:39

林克很强大。但是,我们应该时刻小心,不要跳下去。别误会我,我喜欢LINQ,在很多情况下,它是一个漂亮的工具。在你的例子中,你的代码是完全可读的,但是LINQ版本混淆了你的意图,程序员突然必须弄清楚到底是怎么回事。

你的版本是清晰的,简洁的,充满意图的。

相比之下,LINQ版本是一个令人厌恶的版本。

票数 4
EN

Software Engineering用户

发布于 2014-01-16 22:43:39

我使用的一条经验法则是:“这段代码更容易阅读吗?”

重构可能一开始看起来很酷,它可能使用与您通常所做的不同的东西。然而,在一天结束时,你最好使用比计算机给你的“热”更容易理解的代码。

所以,如果一台电脑给我的代码是我很难快速摸索的,我可能会拒绝它的建议。

票数 3
EN

Software Engineering用户

发布于 2014-01-17 05:58:16

自动重构工具不是自动化思维工具。仅仅因为您可以在一段代码上应用一些重构(您总是可以),并不意味着您应该这样做。千万不要仅仅因为工具暗示你就应该去做一些事情。您和您的团队负责决定哪些是可维护的,哪些是不可维护的。

尽管如此,自动化重构是很棒的,ReSharper可能是我使用过的最好的工具。重构工具可以节省大量时间,但它们不能使您免于思考:)

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/224448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档