2009-06-09 15 views
5

Actualmente estoy refaccionando algunos códigos para hacerlo más comprobable. Específicamente, estoy extrayendo la interfaz de varias clases para permitir la creación fácil de dobles de prueba.Convenciones de nomenclatura de interfaces extraídas

Me gustaría mantener la interfaz pública igual a este código, nombrando la interfaz después de la clase original.

Sin embargo, esto me deja con el problema de cómo llamar a la clase original.

Estoy usando C++.

Si mi interfaz es:

class ServiceClient; 

¿Qué debería llamar a la Contrete, yo he llegado con algunas opciones que no estoy convencido por:

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

Qué hacer convenciones ¿La gente usa?

+0

Ver esta pregunta para otra toma en esto: [Default vs Impl la hora de implementar las interfaces en Java] (http://programmers.stackexchange.com/questions/75956/default-vs-impl-when-implementation-interfaces-in-java) – User

Respuesta

6

Cambiaría el nombre de la clase de interfaz.

class ServiceClientInterface {}; 

A continuación, coloque las implementaciones concretas en espacios de nombres seprate:

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

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

o algo completamente diferente.
PS. Estoy en nombres completos. No me gusta el corto 'yo' es cosa de interfaz. Tu gusto puede variar

+0

He decidido usar la interfaz de postfix ya que esto resuelve el problema y tiene la ventaja adicional de mostrar qué clases son en realidad interfaces ya que C++ no tiene forma de hacer cumplir esto. –

0

ServiceClientInterface/ServiceClient, o ServiceClient/ServiceClientImpl. Los otros suenan demasiado artificiales.

0

ServiceClientImpl tiene más sentido para mí. Es el que más claramente te dice lo que necesitas saber. Que esta es la implementación detrás de un cliente de servicio.

"Estándar" y "Básico" no te dicen nada realmente útil. ¿Hay un ServiceClient no estándar también? ¿Qué es exactamente lo estándar sobre este? ¿Cumple con alguna norma ISO o qué? Y Básico suena como si hubiera una versión "Avanzada" también.

"Concrete" podría funcionar, nunca me gustó esa terminología.

0

Normalmente, reservo "Impl" para el pimpl idiom. Uso una "Interfaz" completa en clases base abstractas. Para implementaciones concretas, la caída de la interfaz y el prefijo con lo que la especialización esto es:

class ServiceClientInterface { 
    // some pure virtual methods 
}; 


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

class TestServiceClient { 
    // some well defined 
}; 
Cuestiones relacionadas