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 -> A
means thatB
state may derive fromA
state and ifA
is updated thenB
may/may not update due toA
update.
-
relazione unidirezionale: un download contiene le seguenti caratteristiche:
-
is download started: boolean
- Può essere impostato sutrue
una sola volta. -
is currently downloading: boolean
- Saràtrue
quandois download started
ètrue
. saràfalse when
è download completatowill be
false. Also, it may change from
true 'a false e viceversa dall'utente. -
download speed: number
: cambierà non appenais currently downloading
ètrue
-
is download completed: boolean
- Può esseretrue
iffis currently downloading
ètrue
.
-
rapporti:
is download completed -> is currently downloading -> is download started
e download speed -> is currently downloading
- relazione bidirezionale: un
master
che è responsabile di piùslaves
(lavori). Amaster
e aslave
contiene le seguenti caratteristiche:
master
:
-
state: In progress/Canceled/Completed
- Inizia conIn progress
stato e saràCompleted
iff tuttoslaves
ha statoCompleted
. -
slaves: slave[]
slave
:
-
state: In progress/Canceled/Completed
- Inizia conIn progress
stato. SaràCanceled
se lo stato dimaster
èCanceled
e 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.