如何在具有分层架构的企业应用程序上应用TDD?
我想知道如何将TDD应用于具有以下
的应用程序据我了解,首先要确保架构正确。结果,识别出组件。 接下来是独立开发组件,我卡住了。
使用TDD,(组件的)设计随着时间的推移而发展。对于下面的组件是(我认为)与TDD一起使用的方式
我面临的问题是,对于组件,直到我到达TDD过程的第6步,我不知道接口。由于有多个组件,多个团队,没有人确定他们会想出什么。
现在基于上述场景的摘要问题
答案 0 :(得分:1)
我认为你订单错了。您正在选择架构,然后尝试使用TDD。 TDD背后的想法是什么都不开始,如果需要的话,可以实现分层架构。
当然,当你看一个非常大的项目时,这可能没有用,因为必须有一些组织。我通常的做法是尝试将工作划分为对真实的人(而不是程序员)有意义的东西。不,我真的不是在谈论完全领域驱动设计。我指的是只考虑不同的部分作为局外人。
例如,如果我想创建一个代表收银机的程序(可以存钱和数字的东西)。
我想要它做的第一件事是什么?持有并分发资金。所以,我需要一个抽屉(第一个组件,交给团队)。我需要一个按钮来打开它(第二个组件,第二个团队)等等......关键是要关注应该做什么,而不是 它应该做什么
是的,必须进行许多合同/协议谈判。这些是团队在遇到问题时必须解决的问题。关键是要专注于你想要它做什么。解决现在的问题。不要预先优化。您可能会发现并非所有组件都需要所有层。
最佳实践问题的简短回答是“它取决于”。 (俗气,常见和过度使用的IT答案。)一般规则是你要关注行为,而不是实现。确保您可以信任测试(它们始终产生正确的结果)。确保你尽可能多地测试......或者,编号......
对不起,如果这真的很模糊。谷歌我放弃的名字,他们是开始的好地方。如果你想在TDD上站稳脚跟,请雇用一些经验丰富的编码员并使用结对编程。如果你买不起,请雇人进来做一些培训,然后做配对编程。不能这样做?获取一些书籍并使用配对编程。
然后,击败对子以确保他们首先编写测试。
在一天结束时,它是关于决定你想要做什么的事情,然后让测试改进架构。不是相反。
答案 1 :(得分:1)
到目前为止,我认为你正朝着正确的方向前进。我建议您在前期设计上花费足够的时间,以便确定每个层之间的接口。如果没有它,开始进行任何开发(更不用说TDD)是不切实际的。一旦所有团队就接口达成一致,您就可以通过使用模拟对象轻松转换到TDD来实现接口。有许多完善的模拟框架,例如Rhino Mocks。预先创建接口的想法可能说起来容易做起来难,而且您无疑将不得不一路改变。但是你需要有一个起点。这是一个挑战,正是组件模型图变得有用的地方。通过让团队协同工作来创建这个,你将无法准确地预测最终的接口,但是你将获得高级细节,这将有助于避免在项目后期发生惊天动地的重构。
另外,我会特别考虑您的数据库层。这是一个值得商榷的话题,值得它自己单独讨论。使用EF你会发现你不能简单地“模仿”整个图层。您必须在EF的TOP上创建一个完全独立的抽象才能这样做。这样做可能会给应用程序增加不必要的复杂性如果需要,您应该非常仔细地考虑 - 如果您可以使用测试数据填充测试数据库,则没有理由不让您的自动化测试直接调用数据库。