Question

Je suis maintenant une application qui a été conçu comme ceci:

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

La capsule de données est une classe simple avec beaucoup de accesseurs (propriétés) Il utilise un cadre de DI et utiliser systématiquement le conteneur IoC pour fournir des instances de la capsule de données (me chance!).

Le problème est, je dois introduire un mécanisme « notification changement » dans simplePoco

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

J'ai quelques options:

  • Introduire un IPoco et modifier le code en désordre, afin que je puisse avoir simplePoco pour la vitesse ou notifyingPoco quand je veux changer la notification (sélective lent)? ou ...

  • Faire tout virtuel et rouler ma propre classe notifyingPoco personnalisée au-dessus de simplePoco (encore plus lent)?

  • modèles de conception que je ne sais pas?

Il est un système client / serveur, mais je suis juste de modifier la partie serveur donc si possible, je préfère pas toucher le code désordre ou le code client (il y a serializers et réflexions et Ninja effrayant enfourne ...) pour ne pas casser quoi que ce soit accidentellement.

Plût à l'aide d'une interface empêche JIT de inline les appels à getter / setter?

Quelle est la meilleure façon d'aller considérant que les instances simplePoco sont très abusé?

Était-ce utile?

La solution

Tout type d'appel virtuel (que ce soit sur l'interface ou directement sur une classe - tous appels d'interface sont virtuelles!) Ne seront pas inline par JIT CLR. Cela dit, les appels d'interface sont un peu plus lent, car ils doivent toujours passer par le potentiellement télécommandables / chemin approximé, et parce qu'ils doivent passer this-pointeur vers le point au début de la classe avant d'entrer dans le corps de la fonction. appels virtuels directement sur les membres de la classe ont jamais à faire le déplacement, et, à moins que la classe est dérivée de MarshalByRefObject, ne touchez pas les contrôles de mandatement.

Cela dit, les différences de performance entre ces deux sont très mineures, alors vous devriez probablement ignorer eux et se concentrer sur la propreté de la conception et la facilité de mise en œuvre à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top