2008-09-05 10 views
10

Estoy diseñando un nuevo sistema y tengo muchas interfaces que crecerán con el tiempo con el sistema. ¿Cuál es la mejor práctica para nombrar esta interfazInterfaces y versiones

ISomethingV01 
ISomethingV02 
etc 

y yo hacer esto

public interface ISomething{ 
     void method(); 
} 

entonces tengo que añadir el método 2 y ahora qué hago?

public interface ISomethingV2:ISomething{ 
     void method2(); 
} 

o de la misma manera?

Respuesta

5

Idealmente, no debería cambiar sus interfaces muy a menudo (si es que lo hace). Si necesita cambiar una interfaz, debe reconsiderar su propósito y ver si el nombre original aún se aplica a ella.

Si aún sientes que las interfaces cambiarán, y los cambios de las interfaces son pequeños (agregando elementos) y tienes el control de toda la base de códigos, entonces solo debes modificar la interfaz y corregir todos los errores de compilación.

Si su cambio es un cambio en la forma en que se utilizará la interfaz, entonces necesita crear una interfaz separada (muy probablemente con un nombre diferente) para admitir ese patrón de uso alternativo.

Incluso si termina creando ISomething, ISomething2 y ISomething3, los consumidores de sus interfaces tendrán dificultades para descubrir las diferencias entre las interfaces. ¿Cuándo deberían usar ISomething2 y cuándo deberían usar ISomething3? Luego tienes que seguir el proceso de obsolescencia de ISomething e ISomething2.

2

El propósito de una interfaz es definir un patrón abstracto que debe implementar el tipo.

Sería mejor poner en práctica como:

public interface ISomething 

public class Something1 : ISomething 
public class Something2 : ISomething 

No se gana nada en la forma de reutilización de código o diseño escalable mediante la creación de múltiples versiones de la misma interfaz.

2

No sé por qué las personas rechazaron su publicación. Creo que las buenas pautas de nombres son muy importante.

Si necesita mantener compatibilidad con anterior. versión de la misma interfaz considere usar herencia. Si tiene que introducir una nueva versión de la interfaz considere el siguiente regla:

intenta agregar el sufijo significativo para usted interfaz. Si no es posible crear un nombre conciso, considere agregar número de versión.

4

Estoy de acuerdo con Garo Yeriazarian, cambiar la interfaz es una decisión seria. Además, si desea promover el uso de la nueva versión de la interfaz, debe marcar la versión anterior como obsoleta. En .NET puede agregar ObsoleteAttribute.

6

Creo que estás sobrepasando las interfaces.

Meyer y Martin nos dijeron: "¡Abierto para la extensión pero cerrado para la modificación!"

y luego Cwalina (et al) reiteró:

De las directrices diseño de la estructura ...

En general, las clases son la constructo preferido para abstracciones exponiendo El principal inconveniente de interfaces. es que son mucho menos flexibles que las clases cuando se trata de permitir la evolución de las API . Una vez que envíe una interfaz , el conjunto de sus miembros es fijado para siempre. las adiciones a la interfaz romperían los tipos existentes que implementan la interfaz.

Una clase ofrece mucha más flexibilidad. Puede agregar miembros a las clases que ya han enviado. Siempre que el método no sea abstracto (es decir, como largo como proporciona una implementación predeterminada del método), cualquier clases derivadas existentes continuará sin cambios en la función .

alt text

Cuestiones relacionadas