首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >web服务如何在不访问服务器数据库的情况下与服务器通信?

问web服务如何在不访问服务器数据库的情况下与服务器通信?
EN

Stack Overflow用户
提问于 2014-06-03 03:32:10
回答 2查看 75关注 0票数 0

我需要为数据收集服务设计一个webservice --要求webservice不能直接访问数据库。

web服务将与数据收集服务对话,而数据收集服务将访问数据库。那么HTTP是web服务与数据收集服务对话的唯一选择吗?但是数据收集服务还有待开发--是否有一种设计应该遵循,以便web服务能够与该服务进行对话?我希望确保数据收集服务被正确实现,这样我就可以在没有太多麻烦的情况下完成我那部分的web服务。

EN

回答 2

Stack Overflow用户

发布于 2014-06-03 03:41:17

在这种情况下,可以将"web服务“看作是任何应用程序。毕竟,访问“数据收集服务”的代码应该可以在任何应用程序中运行。

“数据收集服务”是应用程序的外部依赖项。因此,应该将其抽象到服务外观后面。例如,一个接口。(我将在我的示例中使用C#,因为我最熟悉它。)如下所示:

代码语言:javascript
复制
public interface IDataCollectionService
{
    void CollectData(SomeDataDTO data);
}

此时,所有使用数据收集服务的代码都应该使用此接口类型。在开发数据收集服务之前,您可以使用模拟数据收集服务。任何内存中的实现只要有足够的功能让你继续工作就可以了。例如:

代码语言:javascript
复制
public class MockDataCollectionService : IDataCollectionService
{
    public void CollectData(SomeDataDTO data)
    {
        // do nothing
    }
}

这种实现不会有副作用,不会抛出错误,只是假设外部依赖中的所有内容都按预期工作。您可以编辑/扩展此mock以产生错误条件等。

(请注意,我使用单词"mock“是一种比纯粹的单元测试术语更通用的方式。事实上,这种情况在行业中经常发生。对于您的单元测试本身,您可以使用上面的接口使用任何模拟库来创建实际的单元测试模拟。)

这只是一个例子,如何构建它完全取决于您。重点在于,作为外部依赖项,与数据收集服务的所有交互都在外观后面。然后,当开发该服务时,它使用什么协议和标准就不再重要了。当您创建实现该接口的新DataCollectionService类时,使用这些协议和标准的所有代码都将封装在该类中。项目的其余部分不会知道或关心其中的区别。

然后,当该实现准备就绪时,您可以将其替换为“模拟”实现并测试系统,而无需更改应用程序中的任何其他代码。如果以后决定再次更改协议,那么您唯一需要更改(或创建一个新的)的就是实现接口的类。

实际上,如果您曾经被授予访问数据库的权限,那么所有需要更改的就是再次构建该接口的新实现。从本质上讲,您是否可以访问数据库与使用什么协议一样无关紧要。软件的体系结构对其进行了抽象,因此基础设施的体系结构的影响尽可能小。

票数 1
EN

Stack Overflow用户

发布于 2014-06-03 03:33:38

您可以创建模拟数据收集服务的模拟对象,直到实际的服务完成为止。在创建单元测试时,mock对象可以兼做测试工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24001865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档