Come gestire condizioni complesse? [duplicare]

0

Stiamo lavorando a un progetto in cui dobbiamo gestire queste condizioni. cioè:.

Un utente può salvare un ordine in queste condizioni:

  • L'utente ha l'autorizzazione "SaveOrder"
  • L'ordine è in stato "spedito"
  • Il negozio online è aperto.

Questa condizione è per esempio - vorrei sottolineare che abbiamo tre condizioni da aree diverse (ruolo e permessi, stato interno dell'ordine dell'oggetto e stato di un altro oggetto dominio).

In un progetto precedente abbiamo usato questo codice:

public static bool CanSaveOrder(Order order)
{
   return
   CurrentPrincipal.HasPermission(Permissions.SaveOrder) &&
   order.State == States.Shipped &&
   OnlineShop.IsOpen();
}

Ma sento che può esserci una soluzione più elegante / dinamica.

Ho letto qualcosa su un "motore del ruolo aziendale". È un modo giusto per gestire questa condizione?

    
posta Marek 15.06.2013 - 11:28
fonte

3 risposte

1

Se stai solo chiedendo se lo stesso codice può essere formulato in modo migliore, questo è davvero un duplicato della domanda sopra indicata. Leggi le risposte a questa domanda (e ai i suoi duplicati).

Tuttavia, un motore di regole aziendali è qualcosa di molto diverso. Significa che si specificano le condizioni in un repository separato dal codice - forse un database, forse i file di configurazione, forse un servizio web - e il programma contiene solo codice per leggere informazioni su come prendere la decisione da quel repository. Applicherà quindi la regola e restituirà true o false a seconda di cosa valuterà.

Questo ha conseguenze di vasta portata. È quindi possibile modificare la logica aziendale senza riscrivere il programma, idealmente senza nemmeno ridistribuirlo o riavviarlo. Il rovescio della medaglia è, ovviamente, che il tuo sistema dipende da un altro componente esterno per funzionare, che ottenere le informazioni dal repository potrebbe richiedere più tempo e che il codice per rendere la decisione diventa meno intuitivo di prima. Dipende pesantemente dalla situazione concreta se il passaggio a un motore di regole aziendali ha senso o meno. Che sia considerato o meno "elegante" è soggettivo e di solito non è il criterio più utile per prendere questa decisione.

    
risposta data 15.06.2013 - 12:34
fonte
0
  > "bussiness role engine". Is it a right way to manage these condition?

Dipende.

"motore dei ruoli di bussiness" può avere senso se

  • hai diverse istanze con diverse definizioni di "canSaveOrder" (cioè diversi siti Internet che utilizzano lo stesso software)
  • il significato di "canSaveOrder" cambia spesso.

Altrimenti il "motore dei ruoli di bussiness" può violare i principi YAGNI e BACIO

    
risposta data 15.06.2013 - 13:47
fonte
0

Per la condizione dichiarata nel testo questa implementazione è buona, lo chiamerei anche prima scelta (eccetto per una scheda aggiuntiva necessaria per 3 righe)

    
risposta data 16.06.2013 - 02:43
fonte

Leggi altre domande sui tag