让我在我的答案中添加前身,即我绝不是BDD,TDD或测试第一专家。题外话...
我发现所有测试优先的开发方法都需要水晶球级的透视预感,从头开始才能取得高水平的成功。由于这是完全不切实际的,我发现这种级别的测试只有在核心DDD被充实的原型设计阶段之后才有意义。与其他核心架构决策一起到位,关于如何取得成功有一个清晰的思维过程。
作为一名企业架构师,我在项目开发中的#1想法总是可重复的成功。当核心架构在项目之间保持一致时,这总是更容易实现,更重要的是在同一项目中也是如此。
现在直接回答你的问题,在我的书中,DDD总是会排在第一位。如果没有DDD,我认为当涉及到关键的架构设计决策时,你基本上是在黑暗中刺伤,这些决策以后可能会变得非常痛苦。在我看来,DDD也是一个更高级的概念,它以高级框图表示。有许多BDD故事,这些故事将构成系统之间的DDD级交互。
关于我是否会为UI交互编写故事的问题,它们肯定有价值。然而,它们很容易被跳过,而不是其他工作所需的时间,因为项目限制往往总是比预期的更早出现。您编写的编码 UI 测试不必脆弱。但是,如果它们很脆弱,那么它们一开始就几乎是无目的的。如果您遵循明确的 HTML 元素命名约定,以及编写语义 HTML,则可以创建非常可靠的 UI 单元测试。与webforms相比,这在MVC中更容易表达(ASP.NET,java可能具有某种类似的并行性)。
RE:你建议在实现故事之前创建域名的划痕?
我甚至通常会在定义模型类概念和服务接口方面走得更远。当接口的实现开始时,我就开始处理故事了。这也会导致模型或接口发生变化。如果把整个服务接口和模型设计得像故事一样,我觉得会产生太多的隧道视野。您将开始制作解决特定故事的模型和/或界面,但对于更大的图景几乎没有意义。
因此,要真正总结一下你的中间偏外问题,而不是由外而内的问题。我觉得他们非常有能力相互构建,如果你从DDD中间开始整体概念,然后从外到内地工作细节,那就更是如此。我觉得反向执行该过程将导致比必要的更多的重构,并且重构更加困难,因为您将尝试将核心领域从最有可能在孤岛中开发的相关故事的集合中拉出来。