Pregunta

Tengo algo de código heredado que tiene una tendencia a pasar objetos alrededor como interfaces (IFoo, por ejemplo), entonces, en lugares arbitrarios en el código, de forma espontánea las echó en implementaciones concretas de esas interfaces (digamos, MyConcreteFoo).

Aquí hay un ejemplo tonto:

public bool IsThisFooScaredOfMonkeys(IFoo foo)
{
    if (foo is MyConcreteFoo)
    {
        return ((MyConcreteFoo)foo).BelievesMonkeysAreEvil;
    }
    return false;
}

Lo que me gustaría hacer es escribir una consulta NDepend CQL para recoger este tipo de moldes y dame un recuento por método o según el tipo, o cualquier cosa realmente. Sólo algo así que sé donde puedo empezar a centrarse mis esfuerzos en deshacerse de esta marca en particular de la tontería, en lugar de enviar mi equipo de espeleología a través del código en una búsqueda al azar para lances ...

¿Alguien sabe si hay una manera de hacer eso? Supongo que no (no puede haber demasiada gente por ahí que necesita esa funcionalidad en particular), pero pensé que había que pido aquí primero ...: -)

Por supuesto, alguna otra idea sobre maneras de hacer el reparto de caza de ir más rápido sería igualmente apreciada.

¿Fue útil?

Solución

Esto sería muy agradable, pero NDepend se limita a un conjunto de entidades que no cubre individuo declaraciones.

Entidades NDepend

  1. Métodos
  2. Campos
  3. Tipos
  4. Los espacios de nombres
  5. Conjuntos

A pesar de esta limitación NDepend sigue siendo bastante impresionante! Tal vez esta es una característica próxima versión.

Ahora Patrick Smacchia podría ser capaz de decirme diferente, por lo que pondría en contacto con él con esta pregunta. Yo esperaría para obtener una respuesta de vuelta más rápido que está bastante por encima de las cosas.

en un lado Nota:

Si está utilizando ReSharper 5.0 tiene un estructural Buscar que permitiría a encontrar declaraciones como esta. Usted tendría que construir el mismo de la búsqueda, pero es una herramienta muy poderosa.

Este patrón atraparía el ejemplo anterior:

if($fooObject$ is $concreteFoo$)
{
    return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top