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();
}
}
{
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();
}
}
{
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