Domanda

Io sono il mantenimento di un programma che è stato progettato in questo modo:

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

La capsula dati è una semplice classe con un sacco di getter e setter (proprietà) utilizza un quadro DI e utilizzano costantemente il contenitore IoC per fornire istanze della capsula dati (fortunata me!).

Il problema è che ho bisogno di introdurre un meccanismo di "cambiamento di notifica" in simplePoco

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

Ho un paio di opzioni:

  • Introdurre un IPoco e modificare il codice disordinato, in modo che io possa avere simplePoco per la velocità o la notifyingPoco quando voglio cambiare la notifica (selettivamente lenta)? o ...

  • Fare tutto virtuale e rotolare il mio classe notifyingPoco personalizzato in cima simplePoco (anche meno)?

  • modelli di progettazione che non lo so?

Si tratta di un sistema client / server, ma sto solo modificando la parte server in modo, se possibile, preferirei non toccare il codice disordinato o il codice del client (ci sono serializzatori e riflessioni e ninja spaventoso infila ...) per non rompere accidentalmente nulla.

Sarebbe utilizzando un'interfaccia impedisce JIT da inlining le chiamate alle soluzioni getter / setter?

Qual è il modo migliore per andare considerando che le istanze simplePoco sono molto abusato?

È stato utile?

Soluzione

Qualsiasi tipo di chiamata virtuale (sia su interfaccia o direttamente su una classe - tutti chiamate di interfaccia sono virtuale!) Non essere inline dal JIT CLR. Detto questo, le chiamate di interfaccia sono leggermente più lento perché devono sempre passare attraverso il percorso potenzialmente remotata / proxy, e perché devono spostare this-puntatore punto all'inizio della classe prima di entrare nel corpo della funzione. chiamate virtuali direttamente sui membri della classe non hanno a che fare il turno, e, a meno che la classe è derivata da MarshalByRefObject, non ha colpito i controlli dei proxy.

Detto questo, le differenze di prestazioni tra questi due sono molto minore, quindi probabilmente si dovrebbe ignorarli e concentrarsi sulla pulizia del design e la facilità di implementazione, invece.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top