Esiste un nome per il problema di rappresentare lo stato due volte e quindi di uscire dalla sincronizzazione? [chiuso]

2

Ho un sistema con valori di stato configurabili, come BoxCount, "Numero di caselle visibili sullo schermo". Se sto usando alcuni set di modelli pesanti (come MVC) che impongono la creazione di molteplicità di classi, e se seguo schemi di progettazione, trovo spesso il caso in cui esiste un albero di oggetti come questo:

  • CModelBox = una classe del modello che si occupa del numero di riquadri
  • CViewBox = una classe di visualizzazione che si occupa di mostrare il conteggio delle caselle
  • CControllerBox = una classe controller che si occupa di alcuni conteggi di scatole.

Se ognuno dei precedenti aveva un campo (una variabile membro) chiamato Count, e quell'unico fatto (quante scatole?) viene ripetuto nell'implementazione, e quindi in qualche modo deve essere "aggiornato" in ogni modo, è c'è un nome per questo problema? È conosciuto con qualche nome, come anti-pattern o con qualche altro nome formale che potrebbe aiutarmi a fare delle ricerche su come le persone identificano e correggere questi problemi nei loro progetti applicativi?

Il problema molto specifico che osservo più spesso è che ogni volta che hai due campi invece di uno, puoi avere una differenza, e quindi la domanda è, la differenza ha un significato, o è un incidente. Se è una differenza accidentale (e permanente piuttosto che temporanea), un errore nel mantenere le cose in sincrono, allora è un bug in agguato.

Aggiornamento: Sospetto che le persone che costruiscono sistemi in base ai principi OOP "SOLID" potrebbero avere un nome definitivo per questo problema, e se lo fanno, questa è la particolare risposta che voglio. Questa non è una vera opinione, dovrebbe essere supportata da alcune citazioni da una fonte SOLID OOP, come lo zio Bob, o uno dei suoi seguaci.

    
posta Warren P 05.02.2015 - 17:28
fonte

2 risposte

5

Io chiamo questa "ridondanza". La ridondanza è buona o cattiva?

È buono se esiste allo scopo di correggere errori, e se esiste un meccanismo per correggere tali errori.

È brutto se è solo "lì", proprio per quello che descrivi. Può diventare incoerente, e poi sei in mare.

Un metodo che viene venduto come tecnica per prevenire l'incoerenza è notifiche . Non mi interessa per quelli, per una serie di motivi.

Piuttosto, quello che cerco di fare è:

  1. Riduci al minimo la ridondanza, in modo da ridurre al minimo le opportunità di incoerenza. Ciò potrebbe significare condividere dati o qualcosa del genere. Questo è il motivo per cui i database sono "normalizzati".

  2. Quando una certa ridondanza è inevitabile, come spesso accade, capire come gestirla. Prima cerco di capire quale rappresentazione è "il capo", quindi se diverse strutture di dati non sono d'accordo, posso dire a chi credere. Quindi, cerco sempre di seguire una politica di tollerare l'inconsistenza . Provo ad avere un metodo per riconciliare le differenze dove si verificano. Tendo ad usare algoritmi come "unione" e "diff" per farlo. Ciò si oppone alla strategia di utilizzo delle notifiche, ma trovo che sia molto più affidabile ed efficiente.

P.S. Ad esempio, molto tempo fa mi sono imbattuto in esecuzione differenziale che è un modo per gestire ridondanza tra lo stato di un programma e la sua interfaccia utente.

    
risposta data 05.02.2015 - 19:03
fonte
-1

"Wet".

Più precisamente, l'errore di "rimanere ASCIUGARE ."

    
risposta data 05.02.2015 - 17:55
fonte

Leggi altre domande sui tag