|
|
1
4
你真正要问的是,“我如何设计我的API,并考虑到坚实和类似的原则,这样我的API就可以很好地与其他人一起使用?”这不仅仅是关于可测试性。如果您的客户在用您的代码测试他们的代码时遇到问题,那么他们在用您的代码编写/使用他们的代码时也遇到问题,因此这不仅仅是可测试性问题。 简单地提取接口并不能解决这个问题,因为您现有的类接口(具体类作为其方法/属性公开的内容)很可能没有考虑到接口分离原则,因此提取的接口会有各种各样的问题(其中一些问题是您在对以前的answe的注释中提到的)。R)。 我喜欢称之为IHttpContext问题。如您所知,由于httpcontext.current的“magic singleton依赖性”问题,ASP.NET很难进行测试。没有诸如typemock使用的花哨技巧,httpContext是不可模仿的。简单地提取一个httpContext接口并没有那么大的帮助,因为它太大了。最终,即使是ihtpContext也会成为测试的负担,以至于除了试图模仿httpContext本身之外,几乎不值得做更多的工作。 识别对象责任,适当地划分接口和交互,并在设计时考虑开放/关闭原则,这不是你想要的,并且试图强制/死记硬背地进入一个没有这些原则的现有API。 我不想给你这样一个冷酷的回答,所以我会给你一个积极的建议:你如何代表你的客户接受所有的悲伤,在你的旧API之上做一些服务/外观层。这个服务层将不得不处理您的API的细节和痛苦,但是将提供一个好的、干净的、可靠的、友好的公共API,您的客户可以用它来减少摩擦。 这还有一个额外的好处,即允许您慢慢地替换部分API,并最终使其成为新的API,它不仅仅是一个外观,而是API(旧的API被逐步淘汰)。 |
|
|
2
2
另一种方法是创建API的独立分支,并在那里执行选项3。然后,您只需维护这两个版本,并拒绝使用前者。在大多数情况下,将一个分支的更改合并到另一个分支应该自动工作。 |
|
|
3
1
作为对编辑的回复,界面提取在这里确实非常有效:
正如我在评论中所说,这可能不是每个地方都能做到的。我认为您应该确定API中的一些要点,在这些要点中,客户能够伪造交互并从那里开始是非常重要的。您不必对整个API进行完全重写,但它可以逐渐转换。 |
|
|
4
0
您没有提到的一种方法(在大多数情况下我更喜欢这种方法)是为希望API用户能够伪造的类提取接口。不知道您的API,它中的每个类都必须提取它的接口。 |
|
|
5
0
第三方用户不应该测试您的API。他们希望根据您的API测试他们的代码,因此他们需要创建API等的模拟,但他们将依赖您对API的测试来确保它的工作。或者这就是你的意思?您想让您的API易于测试吗? 在这种情况下,重新开始,这次考虑测试人员:) |
|
|
6
0
我同意金。为什么不使用您所解释的最佳实践重新编写核心API,并提供一组代理/适配器类,这些类公开旧接口,但与新的API交谈? 旧的开发人员自然会被鼓励迁移到新的API,但不会被强制立即迁移。新开发人员只需使用新的API。如果您担心开发人员继续使用旧的API,请为旧的API接口宣布一个EOL。 |