Pattern (s) su sovrascrittura delle impostazioni gerarchiche

3

Supponi di avere una gerarchia di unità organizzative:

- Company
-- Branches
--- Departments
---- Teams

Diciamo che ho alcune impostazioni (per semplicità supponiamo che abbiano le stesse proprietà) per ogni livello di gerarchia:

  • Numero massimo di documenti
  • Min altro
  • Può fare X
  • Può fare Y
  • molte altre proprietà

Quindi, le sottounità possono riutilizzare come default le impostazioni dei genitori, oppure hanno modificato solo una o due di queste impostazioni. Lo stesso per le loro sottounità.

Quale sarebbe il modello corretto da seguire - sia come strutture di codice, sia come storage db per supportarlo, con l'idea che le impostazioni di ciascuna unità possono essere modificate indipendentemente e le impostazioni della sub-unità prevalgono sul valore predefinito del genitore.

Stavamo pensando di coppie chiave / valore, e quindi di ricerca per ognuno salendo nella gerarchia fino a trovare il giusto setting, ma questo può diventare brutto abbastanza veloce.

Un'altra opzione che stavamo considerando è che ogni unità ha il proprio record delle impostazioni e aggiorna di conseguenza quando le impostazioni del genitore cambiano.

Apprezzerei qualsiasi suggerimento su approcci / pattern ben noti a tale riguardo.

    
posta Sunny 02.08.2012 - 14:49
fonte

2 risposte

3

Il design che seguo è impostare solo ciò che è stato ignorato. Quindi avrei un set completo di impostazioni predefinite. Quindi a livello di azienda, escluderei solo quelli diversi. A livello di filiale vorrei solo scavalcare quelli che sono diversi rispetto alla società o al default. E così via. In questo modo le impostazioni si accumulano dalla base. La modifica di un'impostazione di livello inferiore sarà "gonfiabile". Ciò mantiene anche il tuo set di dati il più piccolo possibile.

A livello di applicazione, supponendo che il set sia relativamente piccolo, caricarei tutti i valori predefiniti, quindi le sostituzioni dell'azienda pertinente, quindi le sostituzioni del reparto pertinente, ecc. in un set di dati. Puoi quindi cercare qualsiasi impostazione da quella lista.

    
risposta data 02.08.2012 - 15:17
fonte
3

Non sono sicuro che esista un pattern di progettazione OO reale e ben noto, ma è abbastanza simile a come vengono applicati i permessi ACL (permessi) nella maggior parte dei file system, quindi puoi leggerlo.

Il suggerimento di Matt S è praticamente corretto. Consiglierei di memorizzare le impostazioni come set completi, con un'opzione per "non specificato". TortoiseHg, il popolare front-end Mercurial per Windows, fa come segue:

Notareleopzioniperlasciarelecose"non specificate", che lascerebbero l'impostazione a qualsiasi cosa fosse impostata ad un livello superiore. Inoltre, nota che ci sono 3 livelli qui:

Valori predefiniti di fabbrica - > "Impostazioni globali dell'utente" - > "Impostazioni del repository"

Ognuno diventa progressivamente più specifico. Finché puoi risolvere la tua gerarchia in un semplice formato lineare come questo, l'attività è abbastanza semplice. Inizia con il set meno specifico (che dovrebbe avere valori reali per ogni cosa), quindi applica semplicemente il prossimo livello di impostazioni. Se qualcosa è "Non specificato", lascia stare. Quando hai esaurito i livelli delle impostazioni, hai risolto con successo le impostazioni per l'utente.

Potrebbe essere una buona idea tenere traccia del livello di impostazione applicato a ciascuna impostazione, se solo per scopi di debug / informazioni.

    
risposta data 02.08.2012 - 15:47
fonte