05 mayo 2005

VS Hacks: SmartPaster

Aprovechando que ayer me llegó el excelente libro de O'Reilly, Visual Studio Hacks, vamos a inaugurar una sección en el blog. En ella iré comentando los, para mi gusto, mejores hacks expuestos en el libro. Por lo poco que he podido leer hasta ahora, está repleto de información útil para aprovechar al máximo ese IDE de IDEs, el Visual Studio 2003. Incluso vienen trucos exclusivos para la futura versión 2005.

Y ya que sale el tema, os comento una novedad que va a tener la versión 2005: podremos elegir no guardar los proyectos nuevos de forma automática, evitando así lo que se ha venido en denominar el síndrome Windows21 application. Si queremos probar un snippet de código en VS 2005 podremos (además de seguir utilizando el muy recomendable Code Snippet Compiler) crear un nuevo proyecto que se guardará sólo de forma temporal (e invisible para nosotros) en un directorio asignado por el IDE. Después de probar nuestro código, cerramos la solución sin guardarla y santas y benditas pascuas. Pero a lo que vamos, que me pierdo.

Uno de los hacks que más me ha llamado la atención del libro, de momento, es en realidad un Add-In, no un hack propiamente dicho. Se trata de SmartPaster, una herramienta que nos permite copiar texto a la ventana de código del VS de forma inteligente. Hasta ahora, si uno creaba una query SQL, por ejemplo:

SELECT Cus.CompanyName, Cus.ContactName,
Ord.OrderDate, Ord.ShippedDate
FROM Customers AS Cus
INNER JOIN Orders Ord ON Cus.CustomerId = Ord.CustomerId

lo más normal es que se hiciera desde una herramienta externa para asegurarnos que la query funcionaba bien, entre otras cosas. El problema es que al pasar esa query a código fuente en Visual Studio teníamos que formatearla para el lenguaje que estuviéramos usando, y en queries largas es un auténtico coñazo. Para eso se ha inventado SmartPaster. Una vez instalado el add-in copiamos el texto que queramos introducir, seleccionamos con el BDR la opción "Paste as..." del SmartPaster y podemos elegir entre pegar como Comentario, String, Stringbuilder o Region. Por ejemplo, la query anterior pegada como String queda así:

@"SELECT Cus.CompanyName, Cus.ContactName," + "\n" +
@"Ord.OrderDate, Ord.ShippedDate" + "\n" +
@"FROM Customers AS Cus" + "\n" +
@"INNER JOIN Orders Ord ON Cus.CustomerId = Ord.CustomerId";

Y como StringBuilder así:

StringBuilder myStringBuilder = new StringBuilder(218);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}@""SELECT Cus.CompanyName, Cus.ContactName,"" + ""\n"" +{1}", \t, \n);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}{0}@""Ord.OrderDate, Ord.ShippedDate"" + ""\n"" +{1}", \t, \n);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}{0}@""FROM Customers AS Cus"" + ""\n"" +{1}", \t, \n);
myStringBuilder.AppendFormat(@"{0}{0}{0}{0}{0}{0}@""INNER JOIN Orders Ord ON Cus.CustomerId = Ord.CustomerId"";{1}", \t, \n);

Por supuesto, siempre es conveniente usar StringBuilder en lugar de una simple concatenación de textos, por motivos de rendimiento obvios: StringBuilder no llama a nueva nueva instancia de la clase String ni al recolector de basura al terminar cada concatenación de texto, por ejemplo.

En fin, que podéis encontrar SmartPaster, en descarga directa, aquí. Por cierto, mencionar que SmartPaster está creado por un viejo conocido de este blog, Alex Papadimoulis, que tiene su propio blog y es el creador del excelso The Daily WTF.

NOTA.- Antes de que algún avispado denuncie a este post como un WTF en sí mismo, que sepáis que sí, que lo sé. Que usar queries in-line es pecado, hay que usar vistas o mejor aún procedimientos almacenados. Pero los que realmente trabajamos en esto y no nos dedicamos a contar cuántos ángeles bailan en la cabeza de un alfiler sabemos que a veces hay que hacer las cosas mal. Por lo menos sabemos que están mal hechas.

5 Comments:

  • joder que cosa más fea la segunda consulta ¿eh? XD

    Ya es feo meter consultas en el código, pero encima tener que hacerlas así... puaj, quedan ilegibles >_<

    ya sé que sabes que no se deberían hacer así, sólo comentaba lo feas que quedan :P

    By Blogger kebrantador, at 10:35 a. m.  

  • hmmmm... pues ahora mismo me vendría bien algo parecido para java...

    que pase de :

    "BLA BLA BLA " +
    "asdasdasd " +
    "asdasdsdads";

    a:

    "BLA BLA BLA asdaasd adasdad";

    y al reves :P

    lo hace el smartparser este? (es por no insalar el .NET framwork si no lo hace y tal)

    By Blogger kebrantador, at 12:07 p. m.  

  • Keb, ten en cuenta que el SmartPaster es un add-in para Visual Studio: es decir, que necesitas tener el VS instalado. Caraja =)

    By Blogger CodeCruncher, at 6:06 p. m.  

  • ouch... no leí bien

    By Blogger kebrantador, at 8:25 p. m.  

  • usando el add-in para VS 2005, quedaría asi :))...

    StringBuilder myStringBuilder = new StringBuilder(153);
    myStringBuilder.AppendFormat(@"SELECT Cus.CompanyName, Cus.ContactName,{0}", Environment.NewLine);
    myStringBuilder.AppendFormat(@"Ord.OrderDate, Ord.ShippedDate{0}", Environment.NewLine);
    myStringBuilder.AppendFormat(@"FROM Customers AS Cus{0}", Environment.NewLine);
    myStringBuilder.AppendFormat(@"INNER JOIN Orders Ord ON Cus.CustomerId = Ord.CustomerId");

    By Blogger Percy, at 5:17 a. m.  

Publicar un comentario

<< Home