Rimozione di elementi di un'associazione 'almeno una'

4

supponiamo che, indipendentemente dalla tecnologia e dai linguaggi di programmazione, tu abbia un tipo e il tipo abbia un'associazione con un altro tipo. Questa associazione ha la complessità di "almeno uno" (1..n). Come specifichereste il comportamento, quando rimuovete elementi da questa associazione sulla base di un predicato? Supponiamo che il predicato si adatti a tutti gli elementi, quindi la rimozione violerebbe il vincolo 1..n, rimuoveresti tutti gli elementi tranne uno o preferiresti non rimuovere alcun elemento in questo caso (e avere un comportamento simile alla transazione)?

    
posta Benni 12.09.2011 - 21:01
fonte

3 risposte

1

Dipende dal contesto:

  • Se esistesse un elemento predefinito (un elemento che in qualche modo risalta), preferirei il tuo secondo suggerimento di eliminare tutto tranne quell'elemento.
  • Se tutti gli elementi sono uguali e non ha senso definire un elemento predefinito, non selezionerei un arbitrario da non cancellare, perché sembra che potrebbe portare a comportamenti confusi e arbitrari. E un design sporco, perché se il predicato ha senso, allora perché la molteplicità dell'associazione non ha (0..n)? Vorrei quindi cercare una soluzione diversa, ad es.

    • limita il predicato a quelli che non si adattano a tutti gli elementi, se questo ha senso nel tuo caso
    • non rimuove alcun elemento e restituisce il feedback corrispondente all'utente / cliente, in modo che possa modificare il predicato o scegliere un elemento da non eliminare
    • cambia l'associazione in (0..n).
risposta data 12.09.2011 - 21:31
fonte
1

Se i criteri riguardano tutte le occorrenze del (più) lato, non dovresti procedere con l'eliminazione, altrimenti violerai il design.

Tuttavia, vi è 1 caso in cui è consentito (facoltativamente) di cancellare tutte le occorrenze del (più) lato. Questo è il caso in cui il genitore (da un lato) viene cancellato.

Esempio:

Supponiamo che tu abbia un'associazione tra un'intestazione della fattura e gli articoli della fattura su questa fattura, quindi una fattura contiene (1 ... n) articoli. Se elimini la fattura, tutti gli articoli devono essere spediti. Se tenti di eliminare l'ultimo articolo della fattura, il sistema dovrebbe avvisarti che se lo fai, l'intera fattura verrà eliminata.

    
risposta data 13.09.2011 - 01:26
fonte
0

Semplicemente non permetterei la rimozione di tutti gli elementi. Non esporre tale opzione nel tuo modello di dominio.

Un metodo RemoveAllBut(element) potrebbe essere accettabile, anche se sarà necessario verificare che l'elemento sia effettivamente nella raccolta.

    
risposta data 12.09.2011 - 21:12
fonte

Leggi altre domande sui tag