代码之家  ›  专栏  ›  技术社区  ›  Mike

TDD和POAD是否相互竞争?[关闭]

  •  2
  • Mike  · 技术社区  · 14 年前

    Test Driven Development: By Example 肯特·贝克和另一个叫 Pattern-Oriented Analysis and Design: Composing Patterns to Design Software Systems 雅库布。

    这些书采用两种截然不同的方法来设计软件系统。我的印象是,这两种技术都是对立的。我得出这个结论是因为:

    • 在TDD中,我们保持模型重量轻。在POAD中,我们严格地为不同的粒度级别开发模型。我们使用代码生成和往返来保持模型和代码的一致性。
    • POAD似乎更具理论性,而没有被证明有效。许多软件开发人员实践TDD。

    我意识到TDD已经被很好地证明是有效的,尽管我看到使用面向模式的方法进行设计背后有很多理由:

    • 模式提供了比类更高级别的抽象。
    • 模式允许您忽略更高粒度的细节。
    • 试图仅从代码的角度理解系统可能会变得更加困难,但是POAD提供了更高级别的模型来提供可跟踪性。将这些模型与代码结合使用可以使系统以更快的速度更易于理解。

    那么,鉴于此,这些方法是相互竞争和相互排斥的吗?我觉得我更喜欢POAD,尽管我确实认为TDD是一种有价值的设计方法。有更好的方法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Justin Niessner    14 年前

    我不会认为这两种方法相互竞争或相互排斥。

    在我看来,他们应该能够快乐地走在通往更好代码的道路上,手拉手。

        2
  •  1
  •   yfeldblum    14 年前

    他们很不一样,也很有竞争力。TDD也不建议对模式进行重构。

    模式是编程概念,而不是具体的编程。虽然我们将关于域的抽象编码到我们的程序中,但是我们不应该将关于我们程序的抽象编码到我们的程序中。

    模式是理解你的程序与其他程序的关系的一种方式,识别出本质的相似性,但不是编写程序的一种方式。我们确定了不同代码集之间的本质相似性,并称之为“模式”。不建议对模式进行编程-这不像对契约进行编程或对接口进行编程。模式并不指导编程——它们提供了一种对程序进行概念化和讨论的方法。您可以这样说:“在广泛的层次上,XYZ模块中的这组类实现了ABC模式。”。 AbcPatternImpl .