当前位置: 首页 > news >正文

网站纯色背景图怎么做做网站用的什么语言

网站纯色背景图怎么做,做网站用的什么语言,东莞网络推广,seo推广教程seo高级教程C那些事之依赖注入 最近星球里面有个小伙伴让更新一下依赖注入,于是写出了这篇文章,来从实际的例子讲解,本文会讲解一些原理与实现,完整的实现代码懒人版放在星球中,我们开始正文。 大纲: 直接依赖接口依赖…

C++那些事之依赖注入

最近星球里面有个小伙伴让更新一下依赖注入,于是写出了这篇文章,来从实际的例子讲解,本文会讲解一些原理与实现,完整的实现代码懒人版放在星球中,我们开始正文。

大纲:

  • 直接依赖

  • 接口依赖注入

  • 模版依赖注入

依赖注入是一种常用的设计模式,通常会采用接口/模版的方式提高代码的可测性与维护性,下面我们来举个例子。

假设有一个用户服务类UserService,需要通过HTTP客户端与远程服务器进行通信,在这种情况下我们可能会写出如下三种实现。

ce3ea3a333742336550a2dc7fa8e704f.png

1.直接依赖

UserService内部直接依赖HttpClient,例如:

class HttpClient {public:std::string Get(const std::string& url);void Post(const std::string& url, const std::string& data);
};class UserService {private:HttpClient m_httpClient;
};

UserService内部通常会有一些方法去操作m_httpClient,这种方式简单粗暴,但是UserService与具体的HttpClient相耦合,导致难以替换依赖对象,也难以进行单元测试。

于是引出了后面两个方法。

2.接口依赖注入

我们的目标是期望测试的时候很方便的测试,而不需要创建一个具体的类,可以由用户mock出一个类去测试,那么我们可以想到接口,将HttpClient抽出来,得到:

struct IHttpClient {virtual std::string Get(const std::string& url) = 0;virtual void Post(const std::string& url, const std::string& data) = 0;virtual ~IHttpClient() = default;
};
class UserService {private:std::unique_ptr<IHttpClient> m_httpClient;
};

那么在测试的时候便可以mock出一个client进行测试,例如:

class MockHttpClient : public IHttpClient {
public:MOCK_METHOD(std::string, Get, (const std::string& url), (override));MOCK_METHOD(void, Post, (const std::string& url, const std::string& data), (override));
};auto mockHttpClient = std::make_unique<MockHttpClient>();
UserService userService(std::move(mockHttpClient));

经过以上改造,我们可以做到:

  • 在 .cc 文件中隐藏实现细节

  • 针对抽象接口工作

  • 在对象构造期间注入依赖项

3.模版依赖注入

模板依赖注入通过C++模板技术,将依赖对象作为模板参数传递给UserService。在实例化模板时,指定具体的HTTP客户端实现。这种方法在编译时解决依赖问题,无需虚函数调用,提高了性能。同时,也使得UserService类可以灵活地与不同的HTTP客户端实现进行集成,并且易于进行单元测试。

template <typename THttpClient>
class UserService {private:THttpClient m_httpClient;
};

在这种情况下比较好测试,例如:

UserService<MockHttpClient> userService;

这种方式有如下好处:

  • 在模板实例化期间注入依赖项

  • 无需虚拟调用(注意 THttpClient 不是接口,因此可以在编译时解析调用)

以上便是本节要讲的所有内容,本节完整代码放于星球,欢迎订阅下载!

跟我一起实践写代码,戳这里呀~

118afdd0374239d7947f367bf69ea2b0.jpeg

往期推荐:

向量数据库milvus源码剖析之开篇

热度更新,手把手实现工业级线程池

d46b02d51af29b0cc49013a36bc758ce.jpeg

http://www.yayakq.cn/news/559830/

相关文章:

  • 中英语网站制作方法好发信息网网站建设
  • 宁波网站建设详细方案模板韶关住房和城乡建设局网站
  • 哈尔滨建设网站公司c 开发网站开发
  • 如何避免网站被降权wordpress 热搜
  • 网站seo分析报告天然气公司的网站应该怎么做
  • 网页效果图素材网络推广的调整和优化
  • 广东省建设工程质量结构评优在哪个网站公示网站推广需求要素
  • 黄页推广软件网站上海建科建设监理网站
  • 手机网站前端开发布局技巧wordpress上传图片
  • 怎么用wordpress仿站网站推广行业
  • 烟台百度网站建设网站开发专员
  • 怎么样创办一个网站豆瓣网站是怎么建设的
  • 包头焦点网站建设临沂网站制作策划
  • 做视频网站需要多少上传网站 建设公司
  • 北京 网站建设咨询顾问公司it外包公司前景如何
  • 网站搭建服务平台市场营销方案
  • 北京网站设计制作网站如何在电脑登录wordpress
  • 标志vi设计机构郑州seo代理外包
  • flashfxp上传网站2017国办网站建设规范
  • 博客网站素材广州建网站的公司 白云区
  • 有关于网站建设的参考文献it学校培训机构
  • vps挂网站html网站开发主要涉及哪些技术
  • 贵阳网站建设专家怎么做文化传媒公司网站
  • wordpress网站搭建教程视频网络网站建设
  • 网络推广网站首页大图兰州做网站es5188
  • wordpress获取文章详情seo公司优化排名
  • 自己做网站详细流程织梦商城网站模板免费下载
  • 怀柔富阳网站建设湖州长兴做网站
  • 特效网站模板机械行业做网站
  • 颐高养生园网站建设深圳微商城网站制作价格