quarta-feira, 14 de julho de 2010

Extension Methods = Manutenibilidade

Com a versão 3.0 do .Net Framework tivemos, dentre outros recursos, a introdução do Extension Method, que é uma técnica para adicionar comportamento (método) a um determinado tipo sem a necessidade de alterar o código original ou criar tipos derivados.

Uma boa estratégia de uso de métodos de extensão contribui para um a manutenibilidade, que é um aspecto da qualidade de software que se refere ao esforço necessário para diagnosticar deficiências ou causas de falhas, ou localizar as partes a serem modificadas para corrigir os problemas ou à facilidade de modificação ou adaptação, ao esforço necessário para realizar alterações ou para adequar o produto a eventuais mudanças de ambiente operacional.

Imagine um método, em uma classe de negócio, que realiza o a venda de um produto e da baixa no estoque:

if (IsValid(sale) && AllItemsAreValids(sale.SaleDetailsList))
{
    var products = VerifyProductStockAvailability(sale);

    using (var trans = new DataTransaction())
    {
        var daoSale = new DAOSale();
        var daoProduct = new DAOProduct();

        daoSale.Insert(sale);

        for (int i = 0; i < sale.SaleDetailsList.Count; i++)
        {
            daoSale.InsertDetail(sale.SaleDetailsList[i]);
        }

        for (int i = 0; i < products.Count; i++)
        {
            daoProduct.UpdateStock(products[i]);
        }

        trans.Complete();
    }
}

Refatorando o código, aplicando métodos de extensão e buscando uma melhor lêxia do código, podemos chegar em resultados como:

if (sale.IsValid() && sale.SaleDetailsList.HasAllItemsValid())
{
    var products = VerifyProductStockAvailability(sale);

    using (var trans = new DataTransaction())
    {
        sale.Insert();
        products.UpdateStock();
        sale.SaleDetailsList.Insert();
        trans.Complete();
    }
}

Muitos podem argumentar que a diferença é pouca, o código é legível e de boa manutenibilidade das duas formas, eu concordo, porém, na segunda ele é muito mais fácil e rápido para ler e entender, além de que, com o uso dos métodos de extensão introduzimos um nível a mais de abstração.

Um recurso simples, porém, poderoso!

Como você o utiliza em seus projetos? Deixe seu comentário.

Até a próxima!

Nenhum comentário:

Postar um comentário