标签: refactoring

类似Rails的数据库迁移?

是否有任何易于安装/使用(在unix上)的数据库迁移工具,如Rails迁移?我真的很喜欢这个想法,但是纯粹安装ruby/rails来管理我的数据库迁移似乎有些过分.

ruby database migration refactoring ruby-on-rails

18
推荐指数
1
解决办法
3162
查看次数

什么时候不应该重构?

我们都知道重构是好的,我和下一个人一样喜欢它,但是你有真正的案例,最好不要重构吗?

像时间关键的东西或同步?技术或人为原因同样受到欢迎.真实案例场景和经验加分.

编辑:从目前为止的答案来看,看起来不重构的唯一理由就是金钱.我的问题主要与这样的事情有关:假设您想要执行"提取方法",但是如果添加额外的函数调用,则会使代码稍微快一点并阻碍非常严格的同步.只是为了让你知道我的意思.

我有时听到的另一个原因是"用于当前代码布局的其他人会因你的更改而烦恼".当然,我怀疑这是一个很好的理由.

refactoring

18
推荐指数
4
解决办法
4842
查看次数

是否可以在不执行其语句的情况下使用或需要Perl脚本?

我需要的单元测试添加一些老的脚本,这些脚本基本上都是以下形式:

#!/usr/bin/perl

# Main code
foo();
bar();

# subs
sub foo {

}
sub bar {

}
Run Code Online (Sandbox Code Playgroud)

如果我尝试在单元测试中"要求"此代码,代码的主要部分将运行,因为我希望能够单独测试"foo".

有没有办法在不移动foo的情况下执行此操作,禁止进入单独的.pm文件?

testing perl refactoring

17
推荐指数
3
解决办法
2527
查看次数

过早的重构?

我们都听说过早优化,但您如何看待过早的重构?你认为有这样的事吗?这是我得到的.

首先,阅读Martin Fowler的开创性作品"重构"在字面上改变了我在编程方面的生活.

然而,我注意到的一件事是,如果我开始过快地重构一个类或框架,我有时会发现自己编码到一个角落里就可以说了.现在,我怀疑这个问题本身并不是真正的重构,但可能是过早/糟糕的设计决策/假设.

您对此问题有何看法,见解和/或意见?您对此问题有任何建议或共同的反模式吗?

编辑:

从阅读你的答案和更多地反思这个问题,我想我已经认识到,在这种情况下我的问题实际上是"过早设计"的问题,而不一定是"过早的重构".在编码过程的早期,我一直在设计和重构这个方向.我保持一定程度的设计不可知性并专注于对清洁代码进行重构,这让我有点耐心,这使我无法走下这些设计兔子的道路.

refactoring anti-patterns

17
推荐指数
3
解决办法
1656
查看次数

在C#中,应该考虑在类之前多少行重构?

一个好的经验法则是我智能地重构超过50行的任何方法.

计数不包括注释和空格,而是实际代码.我之所以聪明地说,有很多时候,超过50行的课程是可以接受的,不能或不应该改变.

我对课程没有经验法则.一般来说,我不检查类是否应该重构.

在我目前的项目中,我刚刚完成了一个近4000行的课程.然而,没有超过50的方法,并且大多数行和方法是私有的,并且不对类外的任何数据起作用.

重构类的经验法则是什么?

c# refactoring class

17
推荐指数
4
解决办法
1万
查看次数

如何模块化(大型)Java App?

我手边有一个相当大的(几个MLOC)应用程序,我想分成更易于维护的单独部分.目前,该产品由大约40个Eclipse项目组成,其中许多项目具有相互依赖性.仅这一点使得连续构建系统变得不可行,因为每次签入都需要非常重建.

是否有"最佳实践"的方法

  • 识别可以立即分离的部分
  • 以视觉方式记录相互依赖性
  • 解开现有代码
  • 处理我们需要应用于库的"补丁"(目前通过将它们放在实际库之前的类路径中来处理)

如果有(免费/开放)工具来支持这一点,我会很感激指点.

尽管我对Maven没有任何经验,但它似乎强制采用非常模块化的设计.我现在想知道这是否可以迭代地进行改装,或者是否一个项目使用它必须从一开始就考虑到模块化.

编辑2009-07-10

我们正在使用Apache Ant/Ivy拆分一些核心模块.非常有用且设计精良的工具,而不是像maven那样强加给你.

我写了一些更一般的细节和个人意见,说明我们为什么在我的博客上这样做 - 这里发布的时间太长,也许每个人都不感兴趣,所以请自行决定:www.danielschneller.com

java refactoring maven-2 modularity

17
推荐指数
2
解决办法
5147
查看次数

Git如何在重构期间跟踪历史记录?

我很清楚Git如何支持文件移动:因为它使用文件哈希,"添加"文件很容易被检测为与"删除"文件相同.

我的问题是关于重构:考虑到Java,包声明会发生变化,因此文件内容将不相同.在这种情况下,Git如何确定"添加"文件与"已删除"文件共享历史记录?它是否检查"最相似的内容",假设我只做了一些小改动,或类似的非确定性解决方案?

git hash refactoring dvcs

17
推荐指数
1
解决办法
5288
查看次数

DRYing rails视图:partial vs helper

我需要有关DRYing视图代码的最佳实践的建议.我的应用程序中有三个类(NewsItem,RssItem和BlogItem),它们使用不同的视图,但其中包含类似的部分.其中一个部分是这样的:

<% if current_user %>
<footer>
  <%= marks_bar(@item) %>
  <%= favorite_button(@item, "blog_item") || delete_from_favorite_button(@item, "blog_item") %>
  <%= share_button(@item) %>
  <% if current_user.is_mine?(@item) %>
    <div><%= link_to "Edit", edit_user_blog_item_path(current_user, @item) %></div>
  <% end %>
</footer>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这三个班级几乎相同,所以我决定把它带到一个不同的地方.在这里我很困惑:我应该使用部分或辅助方法吗?我知道帮助程序主要用于从HTML中分离ruby代码,但在这种情况下,帮助程序将如下所示:

def toolbar_for(item, type_str, edit_path)
  if current_user
    content_tag(:footer) do |b|
      marks_bar(item).to_s <<
      (delete_from_favorite_button(item, type_str) || favorite_button(@item, type_str)).to_s <<
      share_button(@item).to_s <<
      (content_tag(:div) { link_to("Edit", edit_path)} if current_user.is_mine?(@item)).to_s
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

所以,这里几乎没有HTML代码.

你能不能给我一些建议,你认为哪种方法更好,为什么?此外,这些方法中是否存在一些性能问题(例如,多个字符串串联或频繁的部分加载可能代价高昂)?(这个应用程序相当高负载)

refactoring ruby-on-rails dry view

17
推荐指数
2
解决办法
4909
查看次数

C++代码依赖/调用图"查看器"?

有没有(免费)工具可以显示给定函数中所有函数调用的图形?例如,如果我在一个复杂的函数fun()上使用它我试图理解,它会向我展示fun()按顺序调用的所有函数,然后我就有可能看到函数的相同内容由fun()调用,依此类推.我正在为C++代码寻找这个.这样的事情甚至存在吗?

编辑:我正在使用VS 2008,如果这有帮助,但我认为这样的软件无论如何都可以在源文件上工作

c++ refactoring

17
推荐指数
3
解决办法
1万
查看次数

如何在Clion中自动为.h文件生成函数头?

在C中编写库时,我通常在相应的头文件中定义函数之前最终实现它们.由于头文件中的复制函数头是一个重复的任务,我想知道我是否可以在CLion中自动生成函数头(甚至更好,完整的头文件)?

c refactoring code-generation header-files clion

17
推荐指数
2
解决办法
6512
查看次数