You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TDD开发中功能实现重叠时的路径选择咨询

关于TDD实现灯光控制函数的路径选择咨询

我采用TDD完成了Advent of Code 2015第6题的开发:

先实现了turnOn函数(F#代码如下):

let turnOn (startx, starty) (endx, endy) (grid: bool[,]) =
    for x in startx..endx do
        for y in starty..endy do
            grid.[x, y] <- true

随后开始实现turnOff函数,先编写第一个测试用例:

[<Fact>]
let ``can turn off a light`` () =
    let grid = Array2D.create 1000 1000 true

    do grid |> LightsController.turnOff (0, 0) (0, 0)

    grid
    |> Array2D.iteri (fun x y status ->
        let expected = not (x = 0 && y = 0)

        Assert.Equal(expected, status))

这促使我定义了turnOff函数:

let turnOff (startx, starty) (endx, endy) (grid: bool[,]) = grid.[0, 0] <- false

接着编写第二个测试用例:

[<Fact>]
let ``can turn off another light`` () =
    let grid = Array2D.create 1000 1000 true

    do grid |> LightsController.turnOff (1, 1) (1, 1)

    grid
    |> Array2D.iteri (fun x y status ->
        let expected = not (x = 1 && y = 1)

        Assert.Equal(expected, status))

此时我面临两种实现路径:

  • 路径1:遵循标准TDD流程,逐个编写测试并迭代生产代码,待其结构与turnOn一致后,重构两个函数并提取核心算法;
  • 路径2:复制turnOn代码到turnOff函数中,修改关键部分(将grid.[x, y] <- true调整为对应逻辑),同时复制turnOn的所有测试用例用于turnOff以确保功能正常,之后再重构两个函数提取核心算法。

我更倾向于第二种方案,因为它效率更高且无需重复造轮子,但对复制粘贴的做法存在疑虑,特此咨询该场景下的合理选择。

内容的提问来源于stack exchange,提问作者Mehdi.Valizade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:19:53