Mr.*_*Boy 1 c++ com code-testing
我们的代码库有很多COM对象,所以通常我们会有类似的东西:
//this is the IDL-generated IGetTime interface header
#include "gettime.h"
//our COM class implementation of IGetTime
class CGetTime : public IGetTime
{
public:
CGetTime(CGetTimeCF &factory,...); //COM-specific constructor params
/* IUnknown */
STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR * ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
/* IGetTime */
STDMETHODIMP GetTheTime(); //
};
Run Code Online (Sandbox Code Playgroud)
构造函数和其他一些东西的设置方式,这个类只能通过COM轻松使用...你可以破解创建对象的方法,但它往往是片状的.但是我很多情况下,没有COM就可以使用类的实际功能...如果你能这样做,这也更容易测试new CGetTime();
我想知道这样的事情是一种模式:
class CGetTimeBase
{
public:
STDMETHODIMP GetTheTime();
};
class CGetTime : public IGetTime, public CGetTimeBase
{
...
};
Run Code Online (Sandbox Code Playgroud)
这是一个很好的方法,还是有更好的方法来提供一个提供核心功能的'普通C++'类,以及一个COM类做COM的东西?为了最大限度地减少要编写的代码量,我认为不是不介绍包装器方法,而是在非COM类中使用实际的实现方法,因此它会自动出现在COM类中.
思考?};
在我工作的地方,我们选择将核心C++类与这些类分开COM,原因如下:
这更容易维护.那些不太了解COM的人可以专注于编写核心类,知道的人COM可以安全地包装核心类,而无需关心底层实现.
代码可重用性.这可能不是您的要求,但由于核心类与它们分离COM,我们直接在C++项目中使用它们,COM而不需要它们.
核心测试.由于逻辑与接口分离,因此您可以轻松地进行最小化测试.你不再怀疑:"我的泄漏在哪里?这是我的核心逻辑中的合法泄漏还是与之相关的东西COM?" 核心类可以独立有效地进行测试.
这会增加文件数量和编译时间,但我(我们)认为值得.
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |