Iver's web place

Navegador de Archivos

Calendario del Blog

February 2012
Sun Mon Tue Wed Thu Fri Sat
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3

General

CSharp

  • Métodos o atributos obsoletos

    En diversas ocasiones nos encontramos con que el código que hemos escrito ya no cumple con las mejores prácticas de desarrollo o bien desde un principio decidimos solucionar una incidencia de la forma más rápida posible. Esto ocasiona que llenemos de basura el código que tanto trabajo cuesta mantener haciendo cada vez más difícil su entendimiento y sobre todo la transferencia de conocimiento.



    De este tipo de escenarios es que surge el refactoring y cada que hacemos refactoring debemos cuidar que el código siga funcionando tal y como lo hacia antes. Para estos casos lo mejor es apoyarnos en herramientas que harían un gran trabajo al indicarnos automáticamente como podemos reemplazar los métodos de forma ágil, entre ellas contamos con:



    Aunque por cuestiones de licencia y otros pequeños detalles, lo mejor será que tengamos buenas prácticas y el hábito de revisar nuestro código. Con la ayuda del atributo Obsolete podremos dar seguimiento a aquellos métodos que requieran un refactoring, sobre todo si estamos trabajando en un equipo de desarrollo y encontramos que uno de nosotros hizo un método al estilo:



     
    public static void CreateActivityLog(string containerSourceId, string containerId,
        string action, string sourceId, string instanceId, string docNo, string notes,
        IFrameworkSecurityContext credentials, BaseSecurityDataContract secContext,
        string setAction)
     

    Nota: el ejemplo ha sido obtenido del blog de Lucas Ontivero.



    Lo primero que podríamos hacer para marcar que vamos a refactorizar el método es agregando el atributo como [Obsolete], podemos hacerlo de 3 formas:



     
    class Demo
    {
        [Obsolete]
        public void MetodoObsoleto()
        {
            Console.WriteLine("Se ha invocado a MetodoObsoleto().");
        }
     
        [ObsoleteAttribute]
        public void MetodoObsoletoDos()
        {
            Console.WriteLine("Se ha invocado a MetodoObsoletoDos().");
        }
     
        [Obsolete("No uses este método, puedes emplear la clase -nueva- ")]
        public void MetodoObsoletoTres()
        {
            Console.WriteLine("Se ha invocado a MetodoObsoletoTres().");
        }
     
        [STAThread]
        static void Main(string[] args)
        {
            BasicAttributeDemo attrDemo = new BasicAttributeDemo();
     
            attrDemo.MetodoObsoleto();
            attrDemo.MetodoObsoletoDos();
            attrDemo.MetodoObsoletoTres();
        }
    }
     


    Lo anterior manda un mensaje de aviso ("warning") al compilar el código y nos permitirá ver donde se está invocando cada método. En particular me agrada más usar el tercer ejemplo donde se utiliza un mensaje personalizado para aclarar su uso y como reemplazarlo.



    También podemos agregar una bandera al atributo que nos muestre si causará un warning o un error al compilar el código, esto ayuda en equipos de desarrollo para comunicar al equipo que será reemplazado ("warning") en un futuro cercano y que deben cambiar su código. En caso de que se deba obligar al equipo a cambiarlo, solamente debemos agregar el valor de "true" y esto generará un error del compilador.



     
       [Obsolete("No uses este método, puedes emplear la clase -nueva- ",true)]
        public void MetodoObsoletoTres()
        {
            Console.WriteLine("Se ha invocado a MetodoObsoletoTres().");
        }
     

    Se puede obtener más información sobre refactoring en el blog de Martin Fowler y el sitio de refactoring que ha montado ya que ahí tiene un catálogo para ayudarte en la tarea.

  • Compartamos código

    Cuando desarrollas aplicaciones de software a distancia, es común querer compartir código pero tenemos la limitante de que al hacerlo por correo no se ve el realzado de sintaxis y por mensajero es limitado el envío por los emoticons, el número de líneas o bien simplemente queremos que persista la información para un post en nuestro blog.

    Claro que algunos blogs como Jaws, permiten compartir un código como el siguiente y con sus respectivos tags.

     
     
       1:  ParameterExpression pc = Expression.Parameter(typeof(Customer), "c");
       2:  
       3:  IQueryable<Customer> q3 =
       4:      dc.Customers.Where<Customer>
       5:      (
       6:          Expression.Lambda<Func<Customer, bool>>
       7:          (
       8:              Expression.Equal(
       9:              Expression.Property(pc, typeof(Customer).GetProperty("City")),
      10:              Expression.Constant("London", typeof(string))
      11:          ),
      12:          new ParameterExpression[] { pc }
      13:          )
      14:      );
     
     
  • Etiquetas de documentación XML en C#

    Si bien es conocido que existe la manera de documentar el código desde C# con etiquetas XML, en la mayoría de los proyectos que he estado, pocas son las personas que realmente emplean esta herramienta.

    Debido al escaso uso de documentación en el código, me dí a la tarea de realizar un pequeño extracto de información sobre las etiquetas que se pueden emplear y como generar la documentación de manera automática. Algunas de las etiquetas que se emplean son las siguientes:

    summary: Su contenido se utiliza para indicar un resumen sobre el significado del elemento al que precede. Cada vez que en VS.NET se use el operador “.” para acceder a algún miembro de un objeto o tipo se usará esta información para mostrar sobre la pantalla del editor de texto un resumen acerca de su utilidad.

    Ejemplo:

     
    /// <summary> Método que muestra un texto por pantalla </summary>
    bool MuestraTexto()
    {
       ...
    }
     

Estadísticas de visitantes

5
65
27403