Nota: Esta pregunta se refiere al código escrito en Java o C #.
Estoy gestionando un par de grandes proyectos en los que hemos descubierto problemas (no necesariamente errores) con algunos métodos de terceros / SDK y hemos escrito nuestras propias extensiones que deberían usarse en su lugar. Queremos que los desarrolladores recuerden que no se recomienda usar esos métodos para este proyecto.
Si hubiéramos estado utilizando nuestras propias bibliotecas, podríamos eliminar fácilmente ese método o marcarlo como obsoleto / en desuso, pero no podemos hacerlo para las bibliotecas que no escribimos.
Como ejemplo, utilizamos una biblioteca que nos proporciona dos sobrecargas:
acme.calculate(int quantity_, double priceInUsDollars_);
acme.calculate(int quantity_, string currencyCode_, double priceInCurrency_);
Queremos que los desarrolladores usen siempre el primero y obtengan el precio en dólares estadounidenses de nuestros propios sistemas de tasa de cambio estándar. Y sería bueno que el IDE (Eclipse / Visual Studio) advirtiera a los desarrolladores cuando usen el primero. Una advertencia del compilador también será suficiente.
En este momento, tal como está, tenemos que confiar en los revisores de código para detectar dichos errores y, como pueden ver, ese no es un enfoque confiable.
Una posible forma en que estoy preparado es escribir mi propia verificación de estilo de verificación ( http://checkstyle.sourceforge.net/writingchecks.html ). Pero me preguntaba si había algo simple que pudiera usar. ¿Alguien sabe de maneras de lograr una advertencia IDE / compilador del tipo que he descrito?
Las soluciones que no son IDE / compilador son bienvenidas.
fuente
Respuestas:
Con una herramienta como NDepend / JavaDepend , puede escribir consultas CQL personalizadas para generar advertencias para estos casos muy específicos.
Usted dijo en la pregunta que quería que IDE / Compiler advirtiera a los desarrolladores. Creo que porque NDepend / JDepend se integran estrechamente con el IDE, esto puede resolver su problema.
fuente
El "enfoque de la lista blanca": escriba una biblioteca de contenedor en la biblioteca con esencialmente las mismas firmas de interfaz que la propia biblioteca, pero omita las funciones prohibidas. El reiniciador debe delegar cada llamada de método a la llamada de biblioteca correspondiente. Luego, deje que sus desarrolladores solo usen / link a ese contenedor en lugar de la lib original. El contenedor también puede ser un buen lugar para las extensiones de su biblioteca.
Por supuesto, eso puede ser poco práctico si la lib tiene una API muy grande con varios cientos de funciones. Luego, desea implementar un "enfoque de lista negra" como la solución de "estilo de verificación" que sugirió.
fuente
Una de las ventajas de Reflection de Java es que puede cambiar las propiedades del método en tiempo de ejecución. Uno de los usos es hacer público un método privado, para poder usarlo de todos modos. Podría funcionar al revés, haciendo que los métodos no deseados sean privados, en tiempo de ejecución. Aunque no se verá en la compilación, se verá tan pronto como se pruebe el proyecto.
Este artículo muestra cómo modificar propiedades de métodos en tiempo de ejecución. Aquí está la parte interesante:
fuente
Como ya tenía que crear métodos de reemplazo en algunos casos. Crearía una clase de contenedor para toda la biblioteca y solo usaría su clase de contenedor.
Si la biblioteca se actualiza, deberá actualizar su código de todos modos. La clase de contenedor es lo suficientemente fácil de actualizar.
Evita que los desarrolladores usen el método incorrecto, aunque ... Me atrevo a decir que un desarrollador debería poder recordar qué métodos no debe usar.
fuente