lunes, 9 de mayo de 2011

.NET Tuple - Alternativa a los objetos personalizados

tuple .NET framework 4.0 trajo muchas mejoras importantes, y una de las más importantes para mi ha sido la incorporación de lo que conocemos como Tupla, que como dice la definición, es una secuencia ordenada de objetos o datos.

Entonces, deduciendo: una tupla podría ser una fila de una tabla de la bd, y esa fila podría ser recuperada y mantenida en memoria en un objeto, correcto? correcto.

Sigamos, una de las carencias que yo experimentaba al programar era el hecho de no poder fácilmente crear objetos que conserven múltiples propiedades sin previamente haber creado la clase personalizada.

Por ejemplo, si yo quería crear una colección con cada una de las propiedades de mi menú principal (url, imagen, target, color, etc…), tenía que crear una clase MenuItem, luego sus propiedades, y luego ya era sencillo crear una colección de elementos MenuItem usando una List(Of MenuItem).

Pero si luego quería armar otro menú con otras propiedades tenía que crear otra clase con otras propiedades… entonces te dabas cuenta que al final estabas creando un montón de clases que no tendrían mucho uso realmente.

Y la inquietud era que si hubiera una forma sencilla de crear algo como clases-al-vuelo, entonces sería más fácil. Y zasssssssssss…. apareció el concepto de Tuple en .NET Framework 4.0, que para mi es justo lo que necesitaba.

Obviamente, esta funcionalidad de Tuplas me facilita muchas más cosas que sólo el reemplazo de objetos personalizados. En codeproject encontré un artículo muy completo, denle una chequeada
http://www.codeproject.com/KB/cs/C_Sharp_4_Tuples.aspx

Les pongo un pequeño extracto de código VB.NET que soluciona el caso que les mencionaba acerca de crear el menú de opciones
Dim Menu As New List(Of Tuple(Of Integer, String, String, String, String, Boolean))
Menu.Add(Tuple.Create(1, "Home", "home.gif", "Default.aspx", "_self", True))
Menu.Add(Tuple.Create(1, "Dashboard", "dashboard.gif", "Dashboard.aspx", "_self", True))
Menu.Add(Tuple.Create(3, "Proyectos", "proyectos.gif", "Projects.aspx", "_self", True))
Menu.Add(Tuple.Create(4, "Reportes", "reportes.gif", "Reports.aspx", "_self", True))
Menu.Add(Tuple.Create(2, "Administración", "admin.gif", "Admin.aspx", "_blank", False))

'luego itero por los elementos de la colección
For Each MenuItem As Tuple(Of Integer, String, String, String, String, Boolean) In Menu

'observen que se ha autogenerado una propiedad .ItemX por cada elemento de la tupla
response.Write(String.Format("{0}-{1}-{2}-{3}-{4}", MenuItem.Item1, MenuItem.Item2, MenuItem.Item3, MenuItem.Item4, MenuItem.Item5))

Next
Como ven, no he tenido que crear una clase personalizada, ni luego instanciarla…etc. Simplemente usamos qué cosa? exacto Tuplas.

Finalmente decirles que con esta funcionalidad, Yo estoy saltando de un pie ;)

Espero que les sea de utilidad ;)

No hay comentarios.: