Iniezione di criteri di blocco in una classe

1

Ho una classe che fa alcune operazioni sui dati, e voglio avere diversi schemi di blocco (no-lock, simple-lock e read lock-writer lock) in diverse situazioni.

Pensa a questa classe principale come a una classe di raccolta. In un'istanza questa raccolta viene popolata da dati da un file e su un singolo thread. In questo caso non uso alcun blocco. Dove, come in altri scenari, i dati della raccolta vengono popolati da più Rx-stream (e potenzialmente su più thread) e voglio avere qualche meccanismo di blocco in atto.

Quindi, ho deciso di astrarre il blocco effettivo in una classe di politica diversa e di inserire questa classe di politica di blocco nella classe principale.

Di seguito è riportato il diagramma di classe per le mie interfacce / classi di politiche di blocco:

La classe principale invocerebbe i metodi EnterRead / EnterWrite sulla politica per acquisire il blocco, prima di eseguire operazioni di lettura / scrittura sui dati. Al termine dell'operazione, la classe rilascia il blocco disponendo il token di blocco restituito dai metodi EnterRead / EnterWrite.

La mia domanda è, ho ragione nel pensare che potrei astrarre lo schema di blocco in classi separate o mi metterei in un sottaceto seguendo questa strada?

Aggiorna

Di seguito è riportata l'implementazione di una semplice classe di token di blocco. Questa è una classe privata in SimpleLockPolicy e la politica crea un token facendo new SimpleLockToken(_syncLock) quando un thread richiama i metodi EnterRead / EnterWrite.

class SimpleLockToken : IDisposable
{
    private readonly object _lock;

    public SyncLockToken(object syncLock)
    {
        _lock = syncLock;
        Monitor.Enter(_lock);
    }

    public void Dispose()
    {
        Monitor.Exit(_lock);
    }
}
    
posta sthotakura 14.06.2015 - 14:04
fonte

0 risposte

Leggi altre domande sui tag