Pergunta

Estou mantendo uma aplicação que foi concebido como este:

messy code --abuses--> simplePoco (POCO data capsule)

A cápsula de dados é uma classe simples com lotes de getters e setters (propriedades) Ele usa um quadro DI e consistentemente usar o contêiner IoC para fornecer instâncias da cápsula de dados (me sorte!).

O problema é, eu preciso introduzir um mecanismo de "notificação de alteração" em simplePoco

messy code --abuses--> simplePoco 
               |
               V
         changes logger,
         status monitor
     (I wanna know about changes)

Eu tenho algumas opções:

  • Apresente um IPoco e modificar o código bagunçado, para que eu possa ter simplePoco para a velocidade ou notifyingPoco quando quero notificação de alteração (seletivamente lento)? ou ...

  • Faça tudo virtual e fazer a minha própria classe notifyingPoco costume em cima de simplePoco (ainda mais lento)?

  • padrões de projeto que eu não sei?

É um sistema cliente / servidor, mas eu estou apenas modificar a parte do servidor para que, se possível, prefiro não tocar o código confuso ou o código do cliente (há serializers e reflexões e animais ninja assustador ...) como para não acidentalmente quebrar nada.

Será que usando um JIT impede de interface de inlining as chamadas para getter / setter?

Qual é a melhor maneira de ir considerando que os casos simplePoco são muito abusado?

Foi útil?

Solução

Qualquer tipo de chamada virtual (seja na interface ou diretamente em uma classe - todas chamadas de interface são virtuais!) Não vai ser embutido por CLR JIT. Dito isto, as chamadas de interface são ligeiramente mais lento, porque eles devem sempre ir pelo caminho potencialmente remotos / proxy, e porque eles têm que mudar this-ponteiro para apontar para o início da classe antes de entrar no corpo da função. chamadas virtuais diretamente sobre os membros da classe nunca tem que fazer a mudança, e, a menos que a classe é derivada de MarshalByRefObject, não atingiu as verificações proxy.

Dito isso, diferenças de desempenho entre esses dois são muito menores, então você provavelmente deve ignorá-los e foco na limpeza do design e facilidade de implementação em seu lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top