Извлеченные соглашения об именах интерфейсов - PullRequest
5 голосов
/ 09 июня 2009

В настоящее время я выполняю рефакторинг некоторого кода, чтобы сделать его более тестируемым. В частности, я извлекаю интерфейс нескольких классов, чтобы можно было легко создавать двойники теста.

Я бы хотел оставить открытый интерфейс таким же, как этот код, назвав интерфейс после исходного класса.

Однако это оставляет меня с проблемой того, что называть исходным классом.

Я использую C ++.

Если мой интерфейс:

class ServiceClient;

Что я должен назвать конкретным, у меня есть несколько вариантов, в которых я не уверен:

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

Какие условности используют люди?

Ответы [ 4 ]

6 голосов
/ 09 июня 2009

Я бы изменил имя класса интерфейса.

class ServiceClientInterface {};

Затем поместите конкретные реализации в отдельные пространства имен:

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

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

Или что-то совершенно другое.
PS. Я в полных именах. Мне не нравится, что короткое «я» - это вещь интерфейса. Ваш вкус может отличаться.

1 голос
/ 09 июня 2009

Обычно я резервирую «Impl» для идиомы pimpl . Я использую полный «Интерфейс» на абстрактных базовых классах. Для конкретных реализаций отбросьте интерфейс и префикс с указанием специализации:

class ServiceClientInterface {
   // some pure virtual methods
};


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

class TestServiceClient {
   // some well defined
};
0 голосов
/ 09 июня 2009

ServiceClientImpl имеет для меня наибольшее значение. Это тот, который наиболее четко говорит вам, что вам нужно знать. Что это реализация за ServiceClient.

«Стандарт» и «Базовый» на самом деле ничего вам не говорят. Есть ли нестандартный ServiceClient тоже? Что именно является стандартным в этом? Это соответствует какому-то стандарту ISO или как? А Basic звучит так, будто есть и «Продвинутая» версия.

«Бетон» может сработать, мне просто никогда не нравилась эта терминология.

0 голосов
/ 09 июня 2009

ServiceClientInterface / ServiceClient или ServiceClient / ServiceClientImpl. Другие звучат слишком искусственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...