VB9 XML Literals


Ένα από τα νέα χαρακτηριστικά της VB.NET είναι η υποστήριξη XML Literals. Πρόκειται για τη δυνατότητα της ενσωματώσης XML μέσα στον κώδικα. Για παράδειγμα, μπορεί να πει κάποιος

Dim countriesWithCapital As XElement = _
    <Countries>
        <Country Name=’SomeCountry’ Density=’123456′> 
            <Capital>
                <Name>City Name Here</Name>
                <Longitude>123.45</Longitude>
                <Latitude>123.45</Latitude>
            </Capital>
        </Country>
    </Countries>

Αυτό δεν είναι και τόσο εντυπωσιακό βέβαια. Λίγο πιο εντυπωσιακό είναι ότι μπορεί κανείς να εισάγει expressions a la ASP χρησιμοποιώντας το <%= %> συντακτικό, πχ

Dim countriesWithCapital As XElement = _
    <Countries>
        <Country Name='<%=CountryName%> Density=<%=Density%>> 
            <Capital>
                <Name><%=Name%></Name>
                <Longitude><%=Longitude%></Longitude>
                <Latitude><%=Latitude%></Latitude>
            </Capital>
        </Country>
    </Countries>

Αυτό από μόνο του και πάλι δεν είναι τρομερά εντυπωσιακό, ωστόσο αν συνδυαστεί με ένα LINQ query τότε, έχουμε κάτι πολύ εντυπωσιακό:

Dim countriesWithCapital As XElement = _
    <Countries>
    <%= From country In Countries, city In Capitals _
        Where country.Name = city.Country _
        Select <Country Name=<%= country.Name %>
                        Density=<%= country.Population / country.Area %>>
                  <Capital>
                   <Name><%= city.Name %></Name>
                   <Longitude><%= city.Longitude %></Longitude>
                   <Latitude><%= city.Latitude %></Latitude>
                  </Capital>
               </Country> _
    %>
    </Countries>

Έχουμε ξαναπεί ότι το παραπάνω κάνει τη VB.NET dynamic language, όπερ σημαίνει ότι πλέον μπορούμε να κάνουμε ένα σωρό πολύ εντυπωσιακά κόλπα όπως φαίνεται σε αυτό το απίθανο post της Beth Massi: http://blogs.msdn.com/bethmassi/archive/2007/10/23/avoid-underscores-in-your-multiline-strings.aspx

Θεωρώ ότι τα XML Literals δίνουν ένα πολύ δυνατό code deneration εργαλείο. ΟΚ, υπάρχουν λύσεις όπως το CodeSmith ωστόσο μόνο το γεγονός ότι σε όλα τα παραπάνω έχουμε Intellisence αφήνει τα υπόλοιπα πολύ πίσω. Επιπρόσθετα, εφόσον πρόκειται για κώδικα .NET τότε μπορούμε και μιλάμε για τη δυνατότητα inheritance μέσα στο code pattern, πράγμα πολύ σημαντικό για περίπλοκα code gen σενάρια.