Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns 开发重构友好代码的最佳实践_Design Patterns_Refactoring_Resources - Fatal编程技术网

Design patterns 开发重构友好代码的最佳实践

Design patterns 开发重构友好代码的最佳实践,design-patterns,refactoring,resources,Design Patterns,Refactoring,Resources,作为一名敏捷开发周期中的Java开发人员,我学到了确保以一种不费吹灰之力就能轻松重构类的方式设计类是至关重要的。我想知道,您在日常设计/开发周期中遵循哪些最佳实践可以帮助您轻松执行重构。 例如,我知道应该将实现细节隐藏在接口后面。因此,如果我明天更改实现,我不会干扰使用此API的客户机代码。类似地,我应该尽可能使用“工厂设计模式”,以便可以从一个工厂类控制实现类的更改,而不是找出所有位置并更改它们。 类似地,我想知道您遵循的所有最佳实践对我有什么帮助。您应该有一系列的单元测试,这些测试可以证明代

作为一名敏捷开发周期中的Java开发人员,我学到了确保以一种不费吹灰之力就能轻松重构类的方式设计类是至关重要的。我想知道,您在日常设计/开发周期中遵循哪些最佳实践可以帮助您轻松执行重构。
例如,我知道应该将实现细节隐藏在接口后面。因此,如果我明天更改实现,我不会干扰使用此API的客户机代码。类似地,我应该尽可能使用“工厂设计模式”,以便可以从一个工厂类控制实现类的更改,而不是找出所有位置并更改它们。

类似地,我想知道您遵循的所有最佳实践对我有什么帮助。

您应该有一系列的单元测试,这些测试可以证明代码库在每次重构时没有(无意中)受到影响。

使用TDD。认真地在编写类的同时编写测试迫使您考虑其他人将如何使用它们。当你这样做的时候,你会倾向于写出更好的摘要

关于这一主题的整本书都已经写好了:

  • 代码完成
  • 有效地使用遗留代码
  • 干净代码
  • 重构
  • 对模式进行重构
  • 敏捷原则、模式和实践

其中每一个都以其独特的方式涉及到这一主题。

不要复制和粘贴(也称为干:不要重复自己)。当任何给定的功能只在一个地方实现时,就更容易重新实现该功能。

我的答案涉及重构后的良好结果

方法应该是

  • 简而言之,它们不应该超过一个充满代码的屏幕
  • 最多做一件事:
    • 计算一个值
    • 测试和分支
    • 日志
    • 保护和抛出异常
  • 有一个单一的退出点-我的推理。。
    • 如果您以后需要返回并对返回值执行某些操作,那么这一切都发生在一个位置
    • 易于设置断点并检查返回值
    • 总量为

如果你打算大量学习java,我建议你选择两本书


我推荐和。

这听起来像是一种循环推理,但根据我的经验,我发现这是正确的:

对它进行多次重构

这里的许多答案(特别是一个强大的测试套件)都是很好的建议和帮助,所以让我明确地说,我也支持这些先发制人的措施


起初,它总是很容易改变(当它很小的时候)。然后,在取得突破之前,您通常需要经历几次艰难的重构,才能获得真正灵活的解决方案。

我认为这不是一个java问题-好问题,只是不特定于javaI我并不总是将每个实现细节隐藏在接口后面:相反,在一个类中使实现细节
private
就足够了。单个退出点不应该是一个硬性的规则-请参阅,我在这里倾向于同意Tom的观点。啊-if参数失败或其他一些前置条件失败一些测试返回。。。好吧,我这里没有空间详细阐述我的评论,但这只是该规则的少数例外之一。如果使用异常等,尤其是5-6+级别的嵌套ifs和不同的错误代码,或者将代码分解为许多较小的方法,36707中给出的许多示例都不存在。我也支持Tom。保持方法的简短可以消除单一退出点的所有原因。当一切都是十行或更少,它只是不难发现回报。需要特殊终端处理的逻辑应该包含在一个终端处理函数imnsho中。我想通过Kent Bach的例子添加TDD,以及Lasse Koskela的测试驱动的更新。即使这样,你的单子也是必须的。我认为这是捏造的,但我听说大学数学课程是它自己的先决条件。这有点像。。。但我同意你的看法。使代码具有延展性的是重构。