Come devo implementare la "messa in coda" dell'approvazione sui miei oggetti?

1

Ho una lista di oggetti che dovranno passare attraverso un processo di approvazione.

Sono curioso di sapere se sarebbe meglio aggiungere semplicemente alcune proprietà al mio oggetto, come ApprovedBy e ApprovedOn .

Un'altra opzione è creare una classe ObjectApproval che contenga queste informazioni e altre informazioni che devono essere memorizzate.

Se volevo un elenco di oggetti che necessitavano ancora di approvazione, potrei semplicemente richiedere un ApprovedBy nullo nel primo scenario. Nel secondo scenario, dovrei mantenere un elenco accurato di articoli ObjectApproval .

La prossima cosa è, e se avessi bisogno di un processo di approvazione in più fasi? In questo caso, penso che sarebbe meglio creare un tipo ObjectApproval per tenere traccia di tutti i dettagli intricati e potrei semplicemente interrogare il ObjectApproval.Step (o qualcosa di simile) per trovare gli elementi che un utente specifico deve approvare in base al loro ruolo

Qualche idea su questo? O forse progettare modelli da consigliare?

    
posta Origin 29.07.2013 - 16:50
fonte

1 risposta

1

Se l'approvazione è parte integrante dell'oggetto (chiaramente parte del suo design), quindi rendila parte dell'oggetto. In sostanza, l'oggetto può approvare se stesso (tramite un metodo Approve ()). Ma è più probabile che ci siano altri oggetti che attraversano un processo di approvazione simile (se non identico), e diventa una preoccupazione trasversale.

In pratica, alcuni stati dovranno essere memorizzati con l'oggetto, anche se questo è semplicemente un identificatore per ogni istanza di oggetto in modo che l'oggetto di approvazione sappia quali oggetti sono stati approvati. In genere ciò accade perché l'applicazione comunica con un database e un Object-Relational Mapper fornisce oggetti di dominio che contengono i propri identificatori. Le informazioni di approvazione sarebbero quindi contenute in una tabella diversa.

L'approvazione non dovrebbe semplicemente coinvolgere un campo booleano o una proprietà sull'oggetto. Qualsiasi oggetto può cambiare quel campo e non vi è alcuna responsabilità perché non viene conservata una registrazione dell'approvazione. Ecco perché è necessario un metodo Approve() ; fa il lavoro necessario per archiviare un registro dell'approvazione.

    
risposta data 29.07.2013 - 18:25
fonte

Leggi altre domande sui tag