Per dimostrare meglio le difficoltà di lettura / aggiornamento degli oggetti in un ambiente multithread, sto cercando degli esempi per gruppi di oggetti con una relazione bidirezionale o unidirezionale tra loro in modo tale che se uno è aggiornato allora anche gli altri possono essere aggiornati.
Note:
-
aggiornato è uguale a - lo stato precedente dell'oggetto non è più valido, quindi è necessario creare un nuovo oggetto con valori diversi (No setter, stile funzionale).
-
Non sto cercando alcun tipo di soluzione di sincronizzazione.
Esempi che ho creato / trovato finora:
The notation
B -> Ameans thatBstate may derive fromAstate and ifAis updated thenBmay/may not update due toAupdate.
-
relazione unidirezionale: un download contiene le seguenti caratteristiche:
-
is download started: boolean- Può essere impostato sutrueuna sola volta. -
is currently downloading: boolean- Saràtruequandois download startedètrue. saràfalse whenè download completatowill befalse. Also, it may change fromtrue 'a false e viceversa dall'utente. -
download speed: number: cambierà non appenais currently downloadingètrue -
is download completed: boolean- Può esseretrueiffis currently downloadingètrue.
-
rapporti:
is download completed -> is currently downloading -> is download started e download speed -> is currently downloading
- relazione bidirezionale: un
masterche è responsabile di piùslaves(lavori). Amastere aslavecontiene le seguenti caratteristiche:
master :
-
state: In progress/Canceled/Completed- Inizia conIn progressstato e saràCompletediff tuttoslavesha statoCompleted. -
slaves: slave[]
slave :
-
state: In progress/Canceled/Completed- Inizia conIn progressstato. SaràCanceledse lo stato dimasterèCancelede afferma èIn progress.
rapporti:
master: state -> slaves: state , master: slave[] -> slaves: state e slave: state -> master: state .
Bonus: Esempio per un gruppo di oggetti con una relazione bidirezionale che può essere modificata in una relazione unidirezionale dopo aver realizzato un problema di progettazione - Ma non è facile vederlo immediatamente.