7

Saluti!Regole aziendali dinamiche in un'applicazione Web

Lavorare su un progetto basato sul web richiede che le regole aziendali e la logica siano personalizzate dal cliente. Voglio farlo senza dover ricompilare l'applicazione ogni volta che registriamo un nuovo client sul sistema. Le architetture che ho delineato finora sono:

  1. Flusso di lavoro di Windows: creazione di flussi di lavoro dinamici e salvataggio nel database.
  2. Riflessione: creazione di un'interfaccia di regole aziendali e utilizzo della riflessione per caricare l'assieme client personalizzato.
  3. Un vero motore per le regole aziendali
  4. Implementazione di una mappa di strutture simili a container IOC. [zaff: aggiunto 6/4]

Avete mai implementato qualcosa di simile a questo? Se sì, qual è la tua esperienza? E finalmente c'è un'altra soluzione che dovrei esplorare?

Grazie per il vostro aiuto !!

risposta

2

Ho implementato la maggior parte degli approcci che hai citato. La risposta può dipendere da una varietà di fattori.

Quali ruoli client apporteranno le modifiche alle regole aziendali (ad esempio, analista aziendale, sviluppatore, utente esperto, ecc.)? Un supporto significativo per gli analisti aziendali potrebbe richiedere un motore di regole con regole esternalizzate in un db e un'interfaccia utente utilizzabile.Il supporto significativo per gli sviluppatori potrebbe essere semplice come fare leva su qualcosa come MEF (http://www.codeplex.com/MEF).

È inoltre possibile calcolare la frequenza con cui le regole aziendali devono essere modificate e quali tipi di requisiti operativi associati possono essere applicati (ad esempio, il processo host deve rimanere in esecuzione, lo scaricamento del dominio dell'app, ok, ecc.). Una buona selezione potrebbe richiedere un attento esame delle esigenze future probabili e improbabili.

2

È possibile eseguire regole aziendali basate sui dati, ad esempio this. Gli alberi decisionali possono essere anche un buon modo di procedere.

Si potrebbe anche pensare alla programmazione orientata all'aspetto come un modo per implementare le regole di business.

La mia unica precauzione con un motore di regole di induzione di Rete è che le serie di regole devono essere mantenute piccole e vicine agli oggetti che le utilizzano. Se è possibile incapsulare il comportamento di un oggetto in un motore di regole che fa parte del suo stato, tanto meglio. Non mi interessa la soluzione "enterprise" che scarica migliaia di regole in un motore di regole singleton che diventa una dipendenza per ogni parte dell'azienda.

1

Questo potrebbe non essere l'approccio migliore, ma la mia azienda ha implementato l'opzione n. 2 in diversi casi, con successo.

Fondamentalmente configuriamo i client in un database o in un file di configurazione, e per ogni client, ci sarebbe una tabella di ricerca che memorizza un nome di classe da richiamare per qualsiasi operazione commerciale da eseguire. Quando il codice ottiene una richiesta per il client A, cerca la classe da usare, la crea e la esegue tramite la reflection.

Non sono un grande fan di mettere cose relative al codice nel database, ma in realtà funziona bene e in questo caso non è troppo complicato.

0

Mi piace WF, ma se l'hai guardato e hai deciso di volere qualcosa di diverso, devi guardare K2. Inoltre, BizTalk dispone del supporto BRE.

0

Ho creato un motore di regole dinamiche basato sul seguente motore di regole di business .NET open source NxBRE. Ho usato il motore Flow come esempio principale del mio motore di regole dinamiche.

Ho usato la stessa architettura menzionata nella tua domanda.

1

suggerisco una combinazione di 1 e 3.

Ma Non conservare il flusso di lavoro in un database, conservarlo è un flusso albero di decisione o una regola (come li chiamiamo noi).

Cambiare il flusso di lavoro per adattarlo a un particolare cliente o federarlo al proprio profilo è un'operazione semplice quando si dispone di uno strumento visivo, basato su azioni, come ad esempio Visual Rules. Vi è anche un grande vantaggio nel fare in modo che il proprio analista aziendale o persona di supporto apporti tale modifica, senza dover modificare il codice.

Inoltre, nessuno di questi requisiti richiede strumenti AI complicati come RETE e inferenze. La logica sequenziale è la migliore.

Problemi correlati