Modello di progettazione per la convalida dei dati


23

Quale sarebbe il miglior modello di progettazione per questo problema:

Ho un oggetto A. L'oggetto A può essere registrato o eliminato dal database in base alla richiesta dell'utente.

La convalida dei dati viene eseguita prima della registrazione o della cancellazione dell'oggetto. Esistono un set di regole da verificare prima che l'oggetto possa essere registrato e un altro set di regole per l'eliminazione. Alcune di queste regole sono comuni per entrambe le operazioni.

Finora, penso che il modello di progettazione della catena di responsabilità si adatti di più, ma ho difficoltà a implementarlo.


6
Perché pensi che il modello di progettazione Chain of Responsibility sia la soluzione migliore?
Adam Zuckerman,

Risposte:


17

Normalmente userò una classe di validazione separata per validare ogni caso d'uso. Ad esempio, prima di aggiungere un prodotto al database, userò AddProductValidator per convalidare la regola aziendale, prima di eliminare il prodotto, userò DeleteProductValidator per convalidare, ecc. La regola aziendale comune può essere estratta nella classe di specifica (modello di specifica) e condivisa dalle classi di validatore

Per strutturare la classe del validatore, seguo l'approccio qui: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

Se usi .NET, penso che potresti voler prendere in considerazione una validazione fluida ( https://github.com/JeremySkinner/FluentValidation ). Penso che sia abbastanza bello e abbastanza vicino all'articolo che ho menzionato sopra


1
nuovo URL di convalida fluente: github.com/JeremySkinner/FluentValidation
Brij

4

Come descritto, probabilmente implementerei un tipo di opzione . In questo modo potrei restituire un "Nessuno" o un valore validato (forse pigramente) ma questo è un dettaglio di implementazione e conduce piacevolmente all'idea di usare un decoratore .

Motivo Decoratore

Naturalmente se l'interfaccia diventa brutta userei una facciata .


Decorator avrebbe funzionato, ma di solito penso al pattern Decorator come a qualcosa da usare quando vuoi trasformare l'output in input per un'altra classe da usare. In questo caso avresti semplicemente convalidato. Penso che la catena di responsabilità possa funzionare meglio.
Neil,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.