【问题标题】:Extracted Interface naming conventions提取的接口命名约定
【发布时间】:2009-06-09 14:43:50
【问题描述】:

我目前正在重构一些代码以使其更易于测试。 具体来说,我正在提取几个类的接口,以便轻松创建测试替身。

我想保持与这段代码相同的公共接口,以原始类命名接口。

然而,这给我留下了如何称呼原始类的问题。

我正在使用 C++。

如果我的界面是:

class ServiceClient;

我应该怎么称呼它,我提出了一些我不相信的选项:

class ConcreteServiceClient;
class ServiceClientImpl;
class StandardServiceClient;
class BasicServiceClient;

人们使用什么约定?

【问题讨论】:

标签: c++ interface naming-conventions


【解决方案1】:

我会更改接口类的名称。

class ServiceClientInterface {};

然后将具体的实现放在单独的命名空间中:

namespace MyService
{
    class Client: public  ServiceClientInterface {};
}

namespace MyServiceTest
{
    class TestClient: public ServiceClientInterface {};
}

或者完全不同的东西。
PS。我喜欢全名。我不喜欢简短的“我”是界面的东西。您的口味可能会有所不同。

【讨论】:

  • 我决定使用后缀接口,因为这样可以解决问题,并且可以显示哪些类实际上是接口,因为 C++ 无法强制执行此操作。
【解决方案2】:

通常,我为pimpl idiom 保留“Impl”。我在抽象基类上使用了完整的“接口”。对于具体的实现,去掉接口和前缀:

class ServiceClientInterface {
   // some pure virtual methods
};


class XMLServiceClient {
   // Or whatever "service" it is
};

class TestServiceClient {
   // some well defined
};

【讨论】:

    【解决方案3】:

    ServiceClientInterface/ServiceClient,或ServiceClient/ServiceClientImpl。其他的听起来太矫揉造作了。

    【讨论】:

      【解决方案4】:

      ServiceClientImpl 对我来说最有意义。这是最清楚地告诉您您需要知道的内容。这是 ServiceClient 背后的实现。

      “标准”和“基本”实际上并没有告诉您任何有用的信息。也有非标准的 ServiceClient 吗?这到底是什么标准?它是否符合某些 ISO 标准或什么? Basic 听起来也有“高级”版本。

      “混凝土”可能有用,我只是从不喜欢这个术语。

      【讨论】:

        猜你喜欢
        • 2016-12-15
        • 2010-10-15
        • 2014-12-07
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        相关资源
        最近更新 更多