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 如何进行TDD和递归函数的设计?_Design Patterns_Recursion_Tdd - Fatal编程技术网

Design patterns 如何进行TDD和递归函数的设计?

Design patterns 如何进行TDD和递归函数的设计?,design-patterns,recursion,tdd,Design Patterns,Recursion,Tdd,我想知道将TDD应用于递归函数的设计是否有最佳实践。我的具体例子是一个导航图形的函数 我总是像屠夫一样编写这个函数,通常使用一种方法 因此,现在对TDD和模式重构非常感兴趣,我想知道是否有一种很好的方法来TDD递归函数,如果应用适当的模式,如策略模式、组合方法等 我认为有一件事可以将遍历的逻辑与在节点上实际执行的操作分开,但我不知道如何 有什么建议吗 非常感谢,IMMO使用递归方法解决问题这是一种实现选择,通常您不想测试实现细节 如果在将来的某个时候,您决定更改为迭代函数,则测试不需要更改,并用

我想知道将TDD应用于递归函数的设计是否有最佳实践。我的具体例子是一个导航图形的函数

我总是像屠夫一样编写这个函数,通常使用一种方法

因此,现在对TDD和模式重构非常感兴趣,我想知道是否有一种很好的方法来TDD递归函数,如果应用适当的模式,如策略模式、组合方法等

我认为有一件事可以将遍历的逻辑与在节点上实际执行的操作分开,但我不知道如何

有什么建议吗


非常感谢,

IMMO使用递归方法解决问题这是一种实现选择,通常您不想测试实现细节

如果在将来的某个时候,您决定更改为迭代函数,则测试不需要更改,并用于验证新实现是否提供与前一个实现相同的结果。

有一个很好的方法可以准确地解释您的问题:
如何对斐波那契函数进行TDD?

听起来是一个不错的方法,但情况非常简单。虽然我看到的是,如果你从终端案例发展到顶级案例,这听起来是可行的,但更多的是在行为准则中,而不是在模式中。然而,你当然可以使用组合方法,从简单的场景发展而来,在复杂度越来越高的场景中执行,这是典型的TDD方法。但是,通过相同的测试,如果需要,您可以实现迭代阶乘,这是关键。测试停留在“问题空间”,生产代码停留在“解决方案空间”,迭代与递归是解决方案空间的决定。我同意你的评论。然而,我自然看到的一个关键优势是,您可以通过公共方法更容易地测试私有方法(即,私有方法被理解为您的不同情况)。我不知道为什么我以前没有看到它。也就是说,递归函数自然地与TDD过程保持一致:换句话说,我的问题的答案并不复杂。