Esiste un modello di progettazione per l'aggiornamento degli elenchi?

0

Voglio modificare un elenco (in realtà informazioni memorizzate in un database). Una persona non ha accesso all'aggiornamento di ogni parte dell'elenco, ma può aggiornare ed eliminare le parti a cui ha accesso e aggiungere ciò che desidera all'elenco.

Ecco il mio pseudocodice:

ModifiedList 
OriginalList
OriginalListWithUserRights

for each Thing in ModifiedList do
  if Thing in OriginalList then
    //Leave Along - nothing to change
  else
    OriginalList.add(Thing)

for each Thing in OriginalList do
  if (Thing in ModifiedList) then
    //LeaveAlone - nothing to change (same as above)
  else 
    for each RightsThing in OriginalListWithUserRights do
       if RightsThing not in OriginalList then
         //Leave Alone - don't remove things you don't have rights to
       else 
         OriginalList.Remove(RightsThing)

OriginalList.ReIndex() //because there will be some gaps

Quindi, immagino che funzioni, ma penso che non sia giusto perché è solo una soluzione ovvia. Non ho bisogno di iniziare con tre elenchi come input per questa funzione. Potrei cercare particolari informazioni mentre sto scorrendo la mia lista modificata. Sembra appena strutturato e non abbastanza orientato agli oggetti per il 2014.

Un problema che ho è che aggiungerò tutto alla fine della lista, sembra che dovrei aggiungere cose relative a dove erano nella lista passata, ma in un modo che non rovinare l'ordine di cose che non sono nel mio OriginalListWithUserRights.

    
posta Peter Turner 27.02.2014 - 19:11
fonte

1 risposta

1

Potresti estendere / avvolgere la tua classe Thing in una ModifiedThing che include un HowModified enum con valori Create , Remove , Update e None , e quindi puoi fare qualcosa come:

foreach ModifiedThing in ModifiedList
    thing = ModifiedThing.Thing
    switch ModifiedThing.HowModified
        case Create:
            if UserHasRightsToCreate
                OriginalList.InsertAt(ModifiedThing.index, thing)
        case Delete:
            if UserHasRightsToDelete(thing)
                OriginalList.Remove(thing)
        case Update:
            if UserHasRightsToUpdate(thing)
                OriginalList[thing.Key] = thing
        case None:
            //leave it alone
    
risposta data 27.02.2014 - 19:56
fonte

Leggi altre domande sui tag