Actualmente estoy refabricando mi código para que todas las clases importantes implementen una interfaz (para la capacidad de prueba de la unidad). Encontré una clase que implementa IComparable (sin plantilla); algo así como:Implementación de una interfaz según la cual los genéricos se basan en la interfaz
public MyClass : IComparable
{
public int CompareTo(object obj)
{
MyClass cObj = obj as MyClass;
if (cObj == null) { throw new ArgumentException(); }
// etc.
}
}
Quiero interactuar y usar genéricos mientras estoy en eso; algo como esto:
public IMyClass : IComparable<IMyClass>
{
// Other methods here
}
public MyClass : IMyClass
{
public CompareTo<IMyClass>(IMyClass other)
{
...
}
// Other methods here
}
Pero entonces, idealmente, deberían aplicar MyClass
IComparable<MyClass>
(y luego subclases de MyClass
deben implementar IComparable<MySubClass>
).
Todo esto para hacer varias preguntas:
¿Qué opinas del enfoque que he descrito? ¿Hay una mejor manera de hacer esta refactorización? ¿Hay algún punto en hacer que MyClass
también implemente IComparable<MyClass>
, o es inútil ya que implementamos IComparable<IMyClass>
? ¿Alguna sugerencia o "mejores" prácticas que pueda conocer?
No estoy seguro de estar de acuerdo con su regla de oro, la razón por la que estoy interactuando con esto es porque puedo probar las clases que lo usan. Significa que puedo burlarme de esta clase (aunque podría decirse que eso significa que * estoy * de acuerdo con su regla de oro, ya que la implementaré en las pruebas unitarias). – Smashery
@Smashery: su caso de uso no dejó eso en claro. Ese es un uso perfectamente válido de interfaces que "sigue la regla". :-) –