Voglio creare una sottoclasse di una classe di terze parti, per renderla protetta da thread.
Ho una buona idea di come implementarlo, ma c'è un problema: la superclasse ha una proprietà, che influenza il comportamento di uno dei suoi metodi. Se un thread imposta la proprietà, interferirà con gli altri thread quando chiamano il metodo.
Posso vedere due modi per farlo:
- Crea un oggetto "stateless" thread-safe che quindi contiene più "viste". La proprietà è nella vista e ogni thread ha la propria istanza di visualizzazione.
- Rileva quale thread effettua la chiamata nell'accessorio get della proprietà e nel metodo, e memorizza internamente lo stato per quel thread.
(1) è auto-esplicativo, ma coinvolge più codice boilerplate. (2) fa qualcosa di non banale dietro le quinte, ma se funziona, è completamente trasparente.
Quale è il migliore, per manutenibilità e leggibilità? Il codice più complesso, ma il cui comportamento è immediato, o il codice che è più facile da usare quando funziona, ma se si rompe lo farà in una posizione e in un modo che non è ovvio?
C'è qualche ragione per cui un oggetto non deve dipendere da quale thread interagisce con esso?
(EDIT: rimozione del riferimento alla classe di terze parti, poiché i requisiti dell'implementazione non sono così semplici come sembra e generava più confusione del necessario!)