miércoles, 31 de marzo de 2010

Mecanismos de extensión: Addins


Como se ha comentado previamente, los Addins son piezas que podemos anclar en el entorno de VS para poder añadirle funcionalidad.

En esta sección se va a describir con más detalle en qué consisten, mediante la utilización de algunos ejemplos que servirán para aclarar los conceptos asociados a los Addins.

¿Por qué definir Addins?


Los motivos pueden ser muy numerosos, pero siempre con un objetivo de fondo, aportar una o más funcionalidades al entorno de desarrollo de VS.

¿Cómo se crean?

Para crearlos, existe un tipo de proyecto específico para ello. Al crear un nuevo proyecto en VS, podremos encontrarlo bajo “Otros tipos de proyectos” y dentro de esta sección en “Extensibilidad”.

Al pinchar en “Extensibilidad” se puede ver una plantilla de proyecto denominada “Complemento de Visual Studio”.

Una vez seleccionada la plantilla, se introduce un nombre para el Addin y una ubicación para el proyecto. Al pulsar aceptar, se comienza la introducción de parámetros de configuración para el Addin, en el cual se pide el lenguaje que se usará para desarrollar el Addin, nombre y descripción, cómo se cargará, etc.

¿Cómo se instalan?

Una vez desarrollado, es necesario instalarlo para poder ejecutarlo, aunque durante el desarrollo es posible probarlos sin necesidad de realizar la instalación. Antes de instalarlos, es debe crear un proyecto de instalación, asociando a dicho proyecto de instalación el proyecto del Addin.

Modos de invocación

Como se verá a continuación, el primer estado por el que pasa un Addin es el estado de “Conectado”, es el momento en el cual VS instancia la clase del Addin y llama a su método “Connect”. Para alcanzar el estado de conectado hay diferentes caminos:

  • Línea de comando. Cuando se lanza VS es posible pasar un parámetro indicando que al abrir ejecute un determinado Addin.
  • Al abrir VS. En este caso, cuando se instala el Addin, queda preparado para ejecutarse cuando se abre VS sin necesidad de indicarlo por línea de comando.
  • Sólo instalado. En este caso, el Addin queda instalado pero no en estado “Conectado”. Para pasar a estado “Conectado” habría que ir al menú “Herramientas” y dentro de éste “Administrador de complementos” desde donde se puede configurar dicho Addin para que sea pasado al estado “Conectado”.

Ciclo de vida

Cuando se inicia VS, busca dentro de la colección de Addins instalados y los pasa a estado “Conectado”. Para ello, invoca al método “Connect”. A partir de aquí el Addin comienza su ciclo de vida.


Al conectarse, continúa la ejecución hasta pasar al estado “Inicializado”. Al llegar a este estado VS llama al método “OnStartupComplete”.

Cada vez que el usuario invoca un comando a través del menú o de alguna barra de herramientas, VS llama al método “QueryStatus” para determinar si el Addin está habilitado o no. Si es así, llama al método “Exec”, en el cual el Addin realizaría las acciones necesarias si tiene implementación asociada a ese comando. El estado al que pasaría sería "Ejecutando".

Los Addins pueden ser descargados sin cerrar VS mediante el “Administrador de complementos”, por este motivo, cuando eso ocurre, VS invoca al método “OnDisconnection”, en el cual se realizarían las acciones de liberación de recursos, etc. previos a la descarga de la aplicación en el estado "Desconectando".

Finalmente, cuando VS se está cerrando también lo notifica a los Addins mediante la invocación del método “OnBeginShutdown” pasando al estado "Cerrando".

martes, 30 de marzo de 2010

Mecanismos de extensión

En el capítulo “Mapa de extensibilidad” se hablaba de los elementos y las partes de VS para las cuales es posible añadir nuevas funcionalidades. En este punto se va a ver de qué medios se dispone para llevarlo a cabo.

Los mecanismos son los medios y las herramientas proporcionadas por VS para poder extender sus funcionalidades o adaptar las existentes a nuevos requisitos. A continuación, se describen dichos mecanismos así como sus posibles aplicaciones, aunque serán vistos más ampliamente en los siguientes capítulos.

Addins

Un Addin es una pieza del entorno de desarrollo de VS. Mediante los Addins es posible añadir, adaptar u ocultar funcionalidades para el manejo del entorno de desarrollo.

Cada Addin es una pieza independiente que puede ser instalado y utilizado según sea necesario, es decir, se pueden definir Addins que se ejecuten al abrir VS, cuando el usuario lo demande o invocados desde línea de comando.

Para poder usarlos es necesario instalarlos previamente en VS. Para ello, se debe disponer de un paquete de instalación. Este paquete se genera mediante un proyecto de instalación de Addins.
Por tanto, estos elementos son utilizados cuando se requiere controlar las acciones y el comportamiento de VS. Una posible aplicación podría consistir en personalizar las paletas herramientas visibles.

Shell

Mediante un Shell es posible crear un entorno más controlado y ajustado a las necesidades de los desarrollos que se van a realizar, permitiendo generar una instalación de VS en la cual sólo se incluya aquellos elementos que van a ser utilizados.

Ejemplo de uso: Se requiere proveer de una herramienta de desarrollo y se ha decidido utilizar VS para ello. Sin embargo, los usuarios de la herramienta no tienen conocimientos en .Net, no saben qué es una dll, qué es un proyecto, un recurso, etc. Una posible solución sería crear un proyecto Shell en el cual es posible cambiar la pantalla de inicio, el icono, etc. (el usuario no sabrá ni que usa VS) y mediante la utilización de Addins ocultar y sustituir las ventanas necesarias para adaptar el entorno a un entorno más asequible.

Plantillas de proyectos

Consisten en una configuración de un proyecto con una serie de recursos predefinidos, lo cual permite agilizar el desarrollo de este tipo de proyectos.

Por ejemplo, se está trabajando con un framework propio, el cual se compone de una serie de dll’s. Si no se dispone de una platilla, cada vez que se crea un proyecto, habría que añadir dichas dependencias. Este problema se podría solucionar con una plantilla. Al utilizar dicha plantilla, creando un nuevo proyecto, automáticamente quedarían incluidas también las referencias a las dependencias.

Atributos

Mediante los atributos es posible diseñar código propio y asociar meta información. Gracias a esta meta información, es posible indicar qué editor se debe utilizar para editar la propiedad en la cual se encuentra el atributo.

Macros

Las macros corresponden a secuencias de instrucciones que son memorizadas bajo un contexto para poder ser repetidas en otro momento, tantas veces como se quiera. Este mecanismo de extensión no se verá detalladamente.

Mapa de extensibilidad

En este capítulo se describe el mapa de extensibilidad de VS. Se identifican y describen, mediante un mapa, las partes extensibles de Visual Studio (de ahora en adelante VS). Este mapa ayudará a comprender mejor los conceptos de extensibilidad de los que se hablará con más profundidad en cada uno de los capítulos siguientes.

VS provee de un modelo de objetos que representa este mapa y al cual se podrá acceder para realizar modificaciones o consultar sus valores. Por ejemplo, los proyectos de una solución que está siendo editada en VS se representan en este modelo de objetos como una colección de objetos de los tipos solución y proyecto.


Barra de menú

Las barras de menú permiten implementar comandos y asociarlos a un botón que aparecerá en la parte superior de VS. Es posible añadir barras personalizadas y ocultar o eliminar las que son proporcionadas de base.

Paletas de herramientas

Al igual que las barras de menú, las paletas también pueden ser configuradas según las necesidades, añadiendo o eliminando controles de las mismas. Además es posible mostrar sólo aquellas barras de herramientas que sean necesarias.

Vistas de diseño

Permiten proveer a VS de diseñadores personalizados según los elementos para los cuales se pretenda dar soporte de edición. Por ejemplo, se podría dar el caso en el cual un determinado tipo de proyecto utilice un XML donde se configura cierta información y que será necesaria utilizar en ejecución. En este caso se implementaría un diseñador personalizado basado en Winform o WPF para poder editar los campos de dicho XML, provocando que al lanzar la acción de editar el XML aparezca en el área de diseño el editor personalizado que se ha implementado para ello.

ToolWindow

Son el tipo de ventanas que maneja VS y que pueden ser acopladas en diferentes partes del entorno de desarrollo. Estas ventanas pueden ser ocultadas o implementadas según las necesidades. Por ejemplo, se podría implementar una ToolWindow para ofrecer una vista de explorador de una solución, diferente a la que ya proporciona VS, permitiendo aislar al diseñador de las gestiones necesarias a la hora de modificar dichas soluciones, como añadir dependencias, añadir elementos de un tipo determinado, etc.

Descriptores de propiedades

Los descriptores se utilizan para dar más información de las propiedades de los componentes con los que se desarrolla en VS, permitiendo al visor de propiedades de VS saber cómo dichas propiedades deberán ser mostradas en dicho visor. Por tanto, dichos descriptores se podrán usar siempre y cuando se diseñen componentes de diseño propios. Por ejemplo, un caso en el cual se implementa un componente caja de texto personalizado, ya que es un requisito para una determinada aplicación el que dichas cajas de texto implementen una funcionalidad determinada. Para ello es necesario añadir propiedades nuevas y dichas propiedades deben ser filtradas en función del perfil del desarrollador. En este supuesto, se definiría un descriptor que tendría acceso al perfil del desarrollador y haría un filtro para mostrar unas propiedades u otras.

Editores de propiedades

Algunas veces, las propiedades que se definen en los componentes, son difíciles de modificar ya que su valor es complejo, por ejemplo en el caso de la propiedad color, la cual se compone de la combinación de tres números. Para solucionar el problema, VS proporciona la posibilidad de asociar un editor más intuitivo a estas propiedades.

Proyectos y soluciones

Consiste en poder manipular los proyectos y las soluciones para añadir y eliminar proyectos, etc. Un ejemplo se podría basar en el que se ha comentado en la sección de las ToolWindow, en la cual se describía una vista personalizada del explorador de soluciones de VS. Esta vista personalizada utilizará por debajo las funcionalidades de añadir y eliminar proyectos, etc.


lunes, 29 de marzo de 2010

Introducción

La personalización de herramientas estándares se ha convertido en una práctica común en los últimos tiempos la cual está siendo aprovechada por las empresas de TIC para generar parte de su negocio.

Las principales ventajas de este tipo de prácticas podrían resumirse en las siguientes:

  • Entornos de desarrollo con los cuales los usuarios están familiarizados, por lo tanto, la curva de aprendizaje se reduce.
  • Herramientas más estables, ya que están basadas en componentes estándares probados por una gran comunidad de desarrolladores.
  • Rápido desarrollo de nuevas funcionalidades.
  • Beneficio automático de las sucesivas versiones del producto estándar, ya que en la mayoría de los casos, se proporcionan mecanismos automáticos de migración de código.

Todo esto ha repercutido, en gran medida, para que los productores de herramientas de desarrollo de software, dediquen cada vez más esfuerzos en proveer mecanismos para facilitar la extensión y personalización de sus productos.

Un ejemplo de este movimiento, es el de Microsoft con Visual Studio .Net. Desde el nacimiento de Visual Studio 2003 hasta el momento en el cual se están escribiendo estas líneas y se espera la liberación de Visual Studio 2010, Microsoft ha ido añadiendo, con cada versión, nuevas funcionalidades para mejorar el proceso de extensión.

A lo largo de los siguientes capítulos se van a ver las posibilidades de extensibilidad de Visual Studio 2010 y sus antecesores, de un modo práctico a través de explicaciones apoyadas de código de ejemplo.

El último capítulo propone una guía de desarrollo desde cero. Desde un análisis de requisitos hasta la implementación e integración de los diferentes componentes que son necesarios para llegar a tener una herramienta propia basada en Visual Studio .Net 2010.

Para poder entender de lo que se habla en este trabajo, es necesario tener conocimientos en el lenguaje C# y el entorno de desarrollo de Visual Studio .Net.