El día de hoy, con la liberación de Visual Studio 2013 se dio a conocer una noticia bastante interesante. Una alianza entre Microsoft y Xamarin podrá hacer que las bibliotecas de clases portables sean una herramienta de alta utilización así que sin más preámbulo comencemos a entender como usarlas.
¿Qué es una PCL?
Una biblioteca de clases es un compilado de clases que puedes implementar bajo varias plataformas en pocas palabras. Un mismo ensamblado para varios proyectos y varias tecnologías. Comenzaré con el ejercicio y probablemente eso servirá para aclarar el panorama.
Abre una nueva solución en Visual Studio y selecciona la opción de Portable Class Library.
Después de asignar un nombre al proyecto viene la parte interesante, poder definir a que entornos apuntar y en medida de su compatibilidad podrás asignar cada vez más funcionalidad. Por ahora seleccionaremos dos opciones Windows Store Apps y Windows Phone 8.
Elimina la clase predeterminada y para este ejercicio crea una llamada Aritmetica, su código debe lucir de la siguiente manera.
using System; namespace OperacionesPCL { public static class Aritmetica { } } |
Dentro de esta clase crea un método de tipo público, estático y que regresa un valor de tipo cadena. Nómbralo Sumar, agrega dos parámetros también de tipo cadena. Dentro del método realiza una conversión de valores a enteros y termina una suma, para terminar solo vuelve a convertir el valor a cadena y devuélvelo.
public static string Sumar(string numero1, string numero2) { int valor1 = Convert.ToInt16(numero1); int valor2 = Convert.ToInt16(numero2); int resultado = valor1 + valor2; return resultado.ToString(); } |
Repite el mismo procedimiento solo cambiando el operador para las cuatro operaciones aritméticas básicas. El código completo deberá lucir de la siguiente manera.
using System; namespace OperacionesPCL { public static class Aritmetica { public static string Sumar(string numero1, string numero2) { int valor1 = Convert.ToInt16(numero1); int valor2 = Convert.ToInt16(numero2); int resultado = valor1 + valor2; return resultado.ToString(); } public static string Restar(string numero1, string numero2) { int valor1 = Convert.ToInt16(numero1); int valor2 = Convert.ToInt16(numero2); int resultado = valor1 - valor2; return resultado.ToString(); } public static string Multiplicar(string numero1, string numero2) { int valor1 = Convert.ToInt16(numero1); int valor2 = Convert.ToInt16(numero2); int resultado = valor1 * valor2; return resultado.ToString(); } public static string Dividir(string numero1, string numero2) { int valor1 = Convert.ToInt16(numero1); int valor2 = Convert.ToInt16(numero2); int resultado = valor1 / valor2; return resultado.ToString(); } } } |
Ya con la clase lista agrega un nuevo proyecto de Windows Phone dentro de la misma solución, has lo mismo con un proyecto de Windows Store App para que la solución completa quede de la siguiente manera.
Comienza con la solución para Windows Phone. Tu interfaz debe lucir de la siguiente manera.
Agrega un manejador de eventos para cada botón y aquí es donde viene lo genial. Da clic derecho sobre las referencias del proyecto y selecciona la opción de Agregar referencia, en la ventana que te aparece, selecciona primero la opción de Solución
Como puedes ver aparece la opción de agregar el ensamblado de OperacionesPCL. Después de agregarlo, tu resultado debe verse así.
Ahora ya puedes acceder a los métodos de ese ensamblado y tu clase MainPage.xaml.cs podrá lucir ya completa de la siguiente manera.
using System.Windows; using Microsoft.Phone.Controls; using OperacionesPCL; namespace ClienteWindowsPhone { public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); } private void btnAdd_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Sumar(txtNumeroSuma1.Text, txtNumeroSuma2.Text); } private void btnMinus_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Restar(txtNumeroResta1.Text, txtNumeroResta2.Text); } private void btnMultiply_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Multiplicar(txtNumeroMultiplicacion1.Text, txtNumeroMultiplicacion2.Text); } private void btnDivide_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Dividir(txtNumeroDivision1.Text, txtNumeroDivision2.Text); } } } |
Repite los tres últimos pasos pero ahora en tu proyecto de Windows Store App. Primero agrega el mismo ensamblado.
Después la interfaz.
Por último el código para los manejadores de eventos.
using OperacionesPCL; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace Cliente_Windows_8 { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } private void btnAdd_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Sumar(txtNumeroSuma1.Text, txtNumeroSuma2.Text); } private void btnMinus_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Restar(txtNumeroResta1.Text, txtNumeroResta2.Text); } private void btnMultiply_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Multiplicar(txtNumeroMultiplicacion1.Text, txtNumeroMultiplicacion2.Text); } private void btnDivide_Click(object sender, RoutedEventArgs e) { txtResult.Text = Aritmetica.Dividir(txtNumeroDivision1.Text, txtNumeroDivision2.Text); } } } |
¿Lo notas? ¡El mismo tipo de implementación! Creaste una clase reutilizable para ambas plataformas, así podrás ver el inicio de la interoperabilidad de código entre plataformas, en este escenario hemos visto el uso de dos únicamente pero las posibilidades van mucho más allá de este ejemplo.
Por ahora diviértete probando este ejercicio, puedes descargar el código desde aquí.