Frage

Ich bin Aufrechterhaltung einer Anwendung, die wie folgt entwickelt wurde:

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

Die Datenkapsel ist eine einfache Klasse mit vielen Getter und Setter (Eigenschaften) Es verwendet einen DI-Framework und konsequent die IoC-Container verwenden Instanzen der Datenkapsel zur Verfügung zu stellen (lucky me!).

Das Problem ist, ich brauche einen „Änderungsmitteilung“ Mechanismus in simplePoco einzuführen

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

Ich habe ein paar Optionen:

  • ein IPoco einführen und den chaotischen Code ändern, so dass ich simplePoco für die Geschwindigkeit oder notifyingPoco haben kann, wenn ich Benachrichtigung will ändern (selektiv langsam)? oder ...

  • Machen Sie alles virtuell und rollen meine eigene benutzerdefinierte notifyingPoco Klasse auf der simplePoco (noch langsamer)?

  • Design-Muster, die ich weiß nicht?

Es ist ein Client / Server-System, aber ich bin zu modifizieren nur den Server-Teil so, wenn möglich, würde ich eher nicht berühren Sie den chaotisch-Code oder den Client-Code (es gibt Serializer und Reflexionen und beängstigend ninja stopft ...) als nicht versehentlich etwas zu brechen.

wäre eine Schnittstelle verhindert JIT von inlining die Anrufe / Setter Getter?

Was ist der beste Weg, unter Berücksichtigung gehen, dass simplePoco Instanzen stark missbraucht?

War es hilfreich?

Lösung

Jede Art von virtueller Call (ob auf der Schnittstelle oder direkt auf einem Klasse - alle Schnittstelle Anrufe sind virtuelle!) Nicht durch CLR JIT inlined werden. Dies vorausgeschickt, sind Schnittstelle Anrufe etwas langsamer, weil sie immer durch die potenziell remoted / proxied Weg gehen müssen, und weil sie müssen this-Zeiger auf Punkt am Anfang der Klasse verschieben, bevor der Körper der Funktion eingeben. Virtuelle Anrufe direkt auf die Teilnehmer nie die Verschiebung zu tun haben, und, es sei denn, die Klasse von MarshalByRefObject abgeleitet wird, kann die Proxy-Kontrollen nicht getroffen.

Wie gesagt, die Leistungsunterschiede zwischen diesen beiden sehr gering sind, so dass Sie wahrscheinlich sie auf Sauberkeit von Design ignorieren sollte und konzentrieren und statt Implementierung erleichtern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top