过早重构? [关闭]

2024-04-03

我们都听说过过早优化 http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize,但是您对过早重构有何看法?您认为有这样的事情吗?这就是我的意思。

首先,阅读马丁·福勒的开创性著作“重构” http://refactoring.com/确实改变了我在编程方面的生活。

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

您对此问题有什么想法、见解和/或意见?您有与此问题相关的任何建议或常见反模式吗?

EDIT:

通过阅读您的答案并更多地反思这个问题,我想我已经意识到我在这种情况下的问题实际上是“过早设计”的问题,而不一定是“过早重构”的问题。我一直在编码过程的早期就朝着这个方向进行设计和重构而感到内疚。如果我有一点耐心来保持一定程度的设计不可知论并专注于重构干净的代码,这将阻止我走上这些设计兔子之路。


我实际上认为相反。

你越早开始考虑你的设计是否需要重构越好。不断重构,所以这从来都不是一个大问题。

我还发现,早期重构得越多,我就能更好地提前更清晰地编写代码。我倾向于创建较少的大型方法,并且遇到的问题也较少。

但是,如果您发现自己“重构”自己陷入困境,我认为这更多是由于缺乏初始设计或缺乏对类的使用范围的规划的问题。在开始编写代码之前尝试写出您想要如何使用类或框架 - 它可能会帮助您避免这个问题。我认为这也是测试驱动设计的优点之一——它可以帮助您强迫自己在编写对象之前考虑如何使用它。

请记住,从技术上讲,重构永远不应该让您陷入困境——它是在不改变类的使用方式的情况下重新设计内部结构。如果你因重构而陷入困境,这意味着你最初的设计是有缺陷的。

您很可能会发现,随着时间的推移,这个问题会变得越来越好。您的类和框架设计最终可能会更加灵活。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过早重构? [关闭] 的相关文章

  • 是否有任何可以以编程方式调用的 Eclipse 重构 API?

    我需要从广义上重构代码 我知道从 Eclipse IDE 内部我可以重构我的类 但是是否有任何 API 可以在 java 项目中使用 以便我可以通过代码动态重构项目 我需要一些关于如何实现以下目标的想法 一个调用所有 Eclipse 重构进
  • PHP 中的死代码检测 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将类成员复制到其他类中 - eclipse

    当您需要将某些类功能移动到另一个类中时 可以通过通过引用某些公共变量 Ctrl Shift G 搜索相应的方法 然后使用 Eclipse 的重构功能 Move 来轻松完成 该功能允许移动选定的方法进入其他班级 但也可能发生您需要复制方法的情
  • 如何在 using 语句中使用对象初始值设定项?

    有没有什么方法可以重构此代码 以便不必使用临时变量 而仍然使用与对象初始值设定项关联的语法糖 FrmSomeForm someTempForm new FrmSomeForm SomePropA A SomePropB B SomeProp
  • 针对可怕的 While (True) 循环的最佳重构

    如果您像我一样在 While True 循环处颤抖 那么您一定也已经认真思考了重构它的最佳方法 我见过几种不同的实现 没有一个真正比其他实现更好 例如计时器和委托组合 那么 您想出或看到的重构可怕的 While True 循环的最佳方法是什
  • 重构我的 C# 代码 - Switch 语句

    我目前正在使用以下代码 基本上 此方法为每个任务分配正确的布尔标志 TRUE FALSE 随着需要添加的任务越来越多 我可以看到 switch 语句必须增长才能满足每个任务 必须有一种更简单的方法 来保持方法较小 代码 忘记命名约定 已更改
  • 从 Spring 控制器中删除重复项

    我一直在寻找一种方法来减少 Spring MVC 控制器中因细微差异而重复的代码量 但到目前为止搜索 SO 问题只产生了一些问题 没有任何令人满意的答案 我想要删除的重复示例是这样的 其中用户创建页面和角色创建页面有相似之处 Request
  • 如何从我的代码中删除重复项

    我有两个类似的方法 其中一个打印一些东西 其中一个保存一些东西 正如你所看到的 有很多重复的代码 我应该如何重构它并删除这种重复 public static void printSomething List
  • 从需求文件中删除未使用的包

    有没有什么简单的方法可以删除不再使用的包要求 file 我为此任务编写了一个 bash 脚本 但是它没有按我的预期工作 因为 某些包未按照其 PyPI 项目名称使用 例如 dj database url 包用作 dj database ur
  • 一次对多个属性使用“转换为自动属性”

    我发现自己经常使用 Resharper 的 转换为自动属性 重构来删除 C 3 0 之前的样板代码 有什么方法可以将其应用到单个类中的所有属性立刻 ReSharper 可以做到这一点 Options gt Code Cleanup gt U
  • 方法可以变成静态的,但是应该吗?

    ReSharper 喜欢指出每个 ASP NET 页面的多个可以静态化的函数 如果我将它们设为静态会对我有帮助吗 我应该将它们设为静态并将它们移至实用程序类吗 在我看来 性能 命名空间污染等都是次要的 问问自己什么是合乎逻辑的 该方法在逻辑
  • Java / 重构 switch case

    我正在尝试重构下一个案例 class Gen public void startClick A a B b List
  • 我可以在 MSBuild 文件中执行循环吗?

    目前 我让他遵循以下代码MSBuild项目文件 这真的很简单 定义4变量并为每个变量调用一次我的 MSBuild 任务 求代码
  • C# - 将“对象”参数转换为该对象的类型?

    C Hi all 我将一个对象传递给一个方法 我想将该对象转换为它的特定类 以便我可以执行它自己的特定方法 我怎样才能做到这一点 Move new Cat Move new Pigeon public void Move object ob
  • 什么时候应该尝试消除 switch 语句? [复制]

    这个问题在这里已经有答案了 我在我正在处理的代码库中遇到了一个 switch 语句 我正在尝试找出如何用更好的东西替换它switch 语句被认为是代码味道 http c2 com cgi wiki SwitchStatementsSmell
  • 如何重构“字符串类型”代码?

    我目前正在开发一个代码库 其中有几类变量 例如数据库路径 它们简单地表示为字符串 这些 非 类型的大多数操作都在实用程序类中定义 我创建了一个新类来表示数据库 并将操作定义为实例方法 采用传统的 OOP 风格 然而 浏览大型代码库并重构它以
  • 耦合、内聚和迪米特定律

    The 德墨忒耳定律 http en wikipedia org wiki Law of Demeter表示你应该只与你直接了解的对象交谈 也就是说 不要执行方法链接来与其他对象通信 当您这样做时 您正在与中间对象建立不适当的链接 不恰当地
  • ASP.NET MVC 中的魔术字符串

    我有桌面软件开发背景 并且正在开始学习 ASP NET MVC 在我的默认 HomeController 中 我有 Index 操作 其代码如下所示 if Request IsAuthenticated return RedirectToA
  • 您将如何整理这个控制器逻辑?

    我在控制器中有一些逻辑 如果满足某些条件 它会设置对象的状态 if params concept consulted legal 0 params concept consulted marketing 1 concept attribut
  • 使用 shoulda 重构 Rails 模型上的 rspec 测试

    了解后应该匹配器 https github com thoughtbot shoulda matchers通过回答关于属性可访问性测试的另一个 StackOverflow 问题 https stackoverflow com a 11849

随机推荐