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 - Fatal编程技术网

Design patterns 在敏捷过程中提取软件共性

Design patterns 在敏捷过程中提取软件共性,design-patterns,Design Patterns,最近,我有机会从事一个遵循敏捷过程的大型软件项目。当我们开始这个项目时,很多软件需求都不清楚。然而,软件负责人犯了一个错误,开发了一个框架,该框架基本上提取了共性,并将这些共性放在了一个超类中。随着项目的进展,许多需求变得清晰,许多现有需求也发生了变化,这导致我们的“框架”不断发生变化 我的问题是,在这种情况下我们应该怎么做 只有在所有需求都明确之后,才能提取共性 在项目完成之前,请尝试任何代码优化 遵循流程,随着需求的变化调整代码 是否存在描述此场景的反模式?很多开发人员对将通用函数移动到一个

最近,我有机会从事一个遵循敏捷过程的大型软件项目。当我们开始这个项目时,很多软件需求都不清楚。然而,软件负责人犯了一个错误,开发了一个框架,该框架基本上提取了共性,并将这些共性放在了一个超类中。随着项目的进展,许多需求变得清晰,许多现有需求也发生了变化,这导致我们的“框架”不断发生变化

我的问题是,在这种情况下我们应该怎么做

  • 只有在所有需求都明确之后,才能提取共性
  • 在项目完成之前,请尝试任何代码优化
  • 遵循流程,随着需求的变化调整代码
  • 是否存在描述此场景的反模式?很多开发人员对将通用函数移动到一个超类很感兴趣?对此的总体反馈是什么


    亲切的问候

    这很难。我去过那里几次。这很难,因为通常我们(作为开发人员或架构师)应该努力提前收集需求……我的队友和我通常会说,没有需求,我们不应该编写一行代码,也不应该做出任何设计决策。这是绝对正确的,但是,在现实生活中,它变得有点复杂,有时客户甚至不知道他们想要什么……然而,执行董事会想让客户高兴,让他们相信我们最适合他们的项目(事实上,我们就是这样),通过让球滚动

    在这一点上,我们开始设计一个“非常灵活、可维护、可扩展的系统”,然后几个月后需求发生变化,我们必须重新设计系统的基础。你会希望有一个神奇的设计模式/指导方针来遵循和防止这种情况……不幸的是,没有


    你总是可以将这种需求蔓延的影响降到最低,但无论你构建的系统多么灵活,你都必须在构建时牢记一组基本需求,如果需求发生变化,那么系统可能也需要改变。

    这是一个困难的问题。我去过那里几次。这很难,因为通常我们(作为开发人员或架构师)应该努力提前收集需求……我的队友和我通常会说,没有需求,我们不应该编写一行代码,也不应该做出任何设计决策。这是绝对正确的,但是,在现实生活中,它变得有点复杂,有时客户甚至不知道他们想要什么……然而,执行董事会想让客户高兴,让他们相信我们最适合他们的项目(事实上,我们就是这样),通过让球滚动

    在这一点上,我们开始设计一个“非常灵活、可维护、可扩展的系统”,然后几个月后需求发生变化,我们必须重新设计系统的基础。你会希望有一个神奇的设计模式/指导方针来遵循和防止这种情况……不幸的是,没有

    您总是可以将此类需求的影响降至最低,但无论您构建的系统多么灵活,您都必须在构建系统时牢记一组基本需求,如果需求发生变化,那么系统可能也需要进行更改。

    极限编程(敏捷开发的一种风格,尽管现在没有过去那么流行)有雅格尼的原则——“你不需要它”。这建议不要预先创建这样的框架,或者任何不直接支持当前故事的东西。更多信息,请参阅

    当然,这可能会走得太远。如果一个项目可能需要,比如说,日志记录/跟踪,那么要等到您有了一个使用日志的可维护性故事,然后才创建一个日志记录框架,然后返回并使用跟踪点对所有类进行检测,而不是作为一个cou问题来做,这将是一项艰巨的工作当你写代码的时候

    因此,你需要实事求是,创造出恰到好处的“你预见到需要的东西”。我认为多少是恰到好处的,你只能凭经验来判断

    就您的三种选择而言,我想这是最接近第三种选择。随着您对问题和软件结构的了解,重构代码并不是一件坏事。前提是,您的小规模设计(封装、关注点分离等)是好的,这样每一次更改都不会涉及几十次复杂的编辑,并且您有好的测试,这些测试涵盖了足够多的功能,但与实现联系不太紧密。然后您可以随着设计的更改自信地重构。

    极限编程(一种敏捷开发的风格,尽管现在不像过去那么流行)有YAGNI的原则——“你不需要它”。这建议不要预先创建这样的框架,或者任何不直接支持当前故事的东西。有关更多信息,请参阅

    当然,这可能会走得太远。如果一个项目可能需要,比如说,日志记录/跟踪,那么要等到您有了一个使用日志的可维护性故事,然后才创建一个日志记录框架,然后返回并使用跟踪点对所有类进行检测,而不是作为一个cou问题来做,这将是一项艰巨的工作当你写代码的时候

    因此,你需要实事求是,创造出恰到好处的“你预见到需要的东西”。我认为多少是恰到好处的,你只能凭经验来判断

    就您的三种选择而言,我想这是最接近第三种选择。随着您对问题和软件结构了解的深入,重构代码并不是一件坏事。前提是,您的小规模设计(封装、关注点分离等)是好的,因此每一次更改都是好的