9

¿Hay algún producto/proyecto que le permita definir convenciones para, por ejemplo, un proyecto MVC para verificar estáticamente las convenciones de nomenclatura como el controlador adjunto al final de las clases heredadas del controlador y/o aplicar una cierta firma de método al decorar un método con un atributo.Comprobación estática para las convenciones marco

Básicamente, estoy buscando una forma de configurar algunos resguardos para los nuevos desarrolladores que entren en nuestro equipo, donde tenemos un conjunto claro de convenciones, algunas de las cuales se utilizan para conectar dinámicamente las cosas a través de la reflexión. Ver que este cableado de reflexión fallaría debido a una firma incompatible sería una gran ayuda para nuestro proceso de aceleración.

Características clave necesaria:

  • estático/tiempo de compilación comprobación de reglas rotas
  • capacidad de dirigirse a métodos decoradas con atributos específicos (a través de expresiones regulares o un asistente)
  • diferentes conjuntos de reglas basadas en diferentes tipos de proyectos. (Ejemplo: un conjunto de convenciones para una aplicación MVC, un conjunto diferente para una aplicación Web Forms, y un conjunto diferente para una biblioteca de clases con el sufijo .BLL)

Cualquier sugerencia de entrada se aprecia aunque te pido que solo responda si sabe que estas características son compatibles.

+0

¿Usted intentó Análisis FxCop/Código? – BrokenGlass

Respuesta

4

Experiencia personal aquí, pero siempre escribo pruebas para cosas como esta. Analizo a través de mis asambleas y me aseguro de que las cosas sigan las convenciones. Para un par de ejemplos específicos, compruebo los objetos de solicitud/respuesta de WCF para asegurarme de que no están enviando "DTO" por el cable y que todos estaban en un espacio de nombres XML consistente.

Aquí está un ejemplo rápido que se asegura de que todos los métodos de servicio vuelven algo que hereda un objeto BaseResponse:

[Test] 
public void All_IMyService_methods_should_return_a_BaseResponse() 
{ 
    var methods = typeof (IMyService).GetMethods(); 
    foreach (var methodInfo in methods) 
     Assert.That(typeof (BaseResponse).IsAssignableFrom(methodInfo.ReturnType), "Service Method " + methodInfo.Name + " does not return a BaseResponse"); 
} 

Estoy seguro de que alguien va a tener algo mejor/más automatizado, pero esto funcionó para mí.

+0

este es un enfoque genial, lo probaré para ver si cubre los casos de uso que me preocupan este fin de semana. – Gent

+1

Me gusta. Es tan flexible como lo que obtendrás. Solo está limitado por la flexibilidad de la reflexión. Es decir, es probable que no se encuentre con algo que no pueda ser probado. –

+0

¡Gracias pude cubrir todos mis casos a través de la reflexión! – Gent

Cuestiones relacionadas