Filtro delle aggiunte a un elenco

1

Spero di postare questo nel giusto SX e l'ho taggato correttamente.

Ho un sistema legacy con cui creo aggiunte contenenti un oggetto elenco personalizzato.

Questo oggetto elenco può contenere due tipi di elementi, un altro elenco o un elemento.

Parte di un'attività corrente richiede che io apporti una modifica all'elenco in modo tale da escludere l'aggiunta di voci o elenchi dipendenti dal loro tipo o se si trovano in un altro elenco di uno diverso o dello stesso tipo.

Una serie di elementi può essere passata all'oggetto lista e vengono aggiunti uno alla volta in un ciclo.

Vorrei implementare le regole sul fatto che un articolo possa essere aggiunto a un elenco come una classe di regole di business separata in cui passo l'elenco e l'articolo alla classe rule e ricevo un valore booleano per decidere se l'elemento può essere aggiunto alla lista o no. Qualcosa sulla falsariga di:

function InsertItems(ArrayOfItems)
    for each item in ArrayOfItems
        if ruler.CanItemBeAddedToList(item, list) then
            add(item)
        end if
    end for
end function

La lingua utilizzata per il sistema legacy è VB.NET, quindi lo stile BASIC dello pseudo-codice.

In termini generali è meglio avere una classe separata per contenere una regola come questa, o dovrebbe far parte della classe list o della classe item? Detto questo, più ci penso e più preferisco una classe dirigente per prendere la decisione piuttosto che incorporare la decisione nella lista. Non credo che dovrebbe essere incorporato nella classe dell'oggetto. Anche se puoi scrivere bene, ad es.

if item.CanBeAddedTo(list) then
   add(item)
end if

Ma questo significa in effetti che l'oggetto deve conoscere gli elenchi, il che non va bene da un punto di vista di accoppiamento. D'altra parte, un elenco dovrebbe conoscere gli articoli, soprattutto dato che l'elenco non è generico?

    
posta Greg 25.06.2015 - 05:00
fonte

1 risposta

1

Dal mio punto di vista il metodo "CanBeAdded" non dovrebbe essere né nell'elemento, né in un righello speciale. Dovrebbe essere nella lista stessa. Pertanto:

if list.CanAdd(item)
    ...
end

L'implementazione Elenco dovrebbe quindi avere un set (probabilmente implementato come elenco) di regole, che definiscono se un articolo può essere aggiunto.

function CanAdd(item) As Boolean
    for each rule in ListOfRules
        if Not(rule.IsFulFilledBy(this, item))
           return False
        end
    end
    return True
end

Ciò consente al sistema di essere aperto a nuove regole, senza dover essere modificato (principio aperto / chiuso).

Chiedo scusa per eventuali errori sintattici. Non ho molta familiarità con i linguaggi di stile BASIC.

    
risposta data 25.06.2015 - 09:55
fonte