Este post se deve à um email que recebi de um colega me perguntando se utilizar Reflection para instanciar as classes de nosso sistema/projeto não perdemos em performance. Não cheguei a fazer testes precisos sobre isso, mas matérias que eu já li a respeito, dizem que instanciar os objetos via Reflection é mesmo mais lento que invocar diretamente o objeto.
Claro que se tivessemos já conhecimento de todas as variações que poderemos vir a ter, não precisaríamos utilizar Reflection, fazendo simplesmente um Select … Case pelas nossas opções e assim instanciar a classe concreta correta através de nosso Factory Method.
Já se utilizarmos o Reflection, o nosso Factory Method ficaria mais ou menos como:
Public Shared Function Create() As IAccount
Dim path As String = GetConfigDAL()
Return DirectCast(Assembly.Load(path).CreateInstance(path & “.Account”), IAccount)
End Function
E no código que instancia o objeto:
Dim account As IAccount = MinhaDALFactory.Account.Create()
Queria mesmo colher opiniões, procurando saber de vossa parte qual é o mais interessante, ou seja, optar por uma melhor performance ou extensibilidade?
Nota 1: Os exemplos foram baseados no Microsoft Pet Shop 3.0, que foi desenvolvimento como um case-study da Microsoft.
Nota 2: A Microsoft, neste case-study, levou em consideração tanto performance quanto extensibilidade (utilizando Reflection), e nem por isso a performance foi degradada.