Il modo migliore per implementare le Business Rules in PHP

5

Sto pensando di scrivere un'app di e-commerce usando PHP & MySQL con lotti e amp; un sacco di regole personalizzate. Per esempio, voglio avere una regola come " Offri al cliente X, uno sconto del 10% per il prodotto Y se lo impacchetta con il prodotto Z "

Ho sentito parlare del motore delle regole aziendali (in Java e altri). Intendo implementare una funzionalità di regole aziendali flessibili senza hard-coding in PHP e con una buona e solida architettura con l'obiettivo di mantenibilità e riutilizzabilità con l'aiuto di PHP OOPS.

Per favore mi consigli sui seguenti aspetti:

La tabella delle decisioni si adatta allo scopo previsto?

Come posso modificare la regola / business logic dell'applicazione PHP senza ridistribuire / riscrivere?

    
posta Mithun John Jacob 23.07.2013 - 08:34
fonte

4 risposte

6

Lavoravo con magento , che era una piattaforma di e-commerce (in php-mysql) che stava facendo esattamente questo. C'è troppo sforzo per fare la funzionalità che vuoi da zero, quindi l'integrazione di una soluzione standard potrebbe essere più appropriata.

Dalla risposta sopra: "Dimentica gli uomini d'affari aggiornandoli, non hanno le competenze necessarie". Questo è un consiglio senza tempo. La gente l'ha provato in passato, ha sempre fallito ...

    
risposta data 24.07.2013 - 10:18
fonte
5

Non importa se si scrivono le regole in PHP, JavaScript o qualche altro, possibilmente lingua specifica del dominio. Se i requisiti sono sufficientemente complessi (i tuoi sembrano essere), richiederanno qualcosa con l'espressività del linguaggio di programmazione e richiederà abilità di programmazione da aggiornare. Dimentica gli uomini d'affari che li aggiornano, non hanno le competenze necessarie.

Ora, se il programmatore deve essere in giro per aggiornare le regole, è meglio scrivere nella lingua esistente per cui si può facilmente ottenere qualcuno che lo capisca. Ad esempio PHP.

Ora fino al punto di hard coding. PHP non è un linguaggio compilato. Non è nemmeno precompilato. L'interprete effettivamente lo riproduce su ogni richiesta. Pertanto, quando si modifica il file con la definizione delle regole aziendali, avrà immediatamente effetto. Volete eseguire la versione di quel file separatamente dal nucleo dell'applicazione o addirittura memorizzarla nel database, ma PHP è probabilmente la più semplice da implementare, abbastanza semplice da mantenere e anche più veloce come qualsiasi interprete di regole scritto in PHP sta per aggiungere notevole spese generali.

Potresti voler usare un po 'di sandbox (google veloce rivela almeno due implementazioni per PHP) per garantire che il file delle regole aziendali non possa toccare nulla al di fuori dell'oggetto della transazione. Questo può essere aggiunto in qualsiasi momento, puoi iniziare senza preoccuparti di questo. Puoi anche aggiungere un po 'di linguaggio grafico che genererà PHP nel database o qualcosa del genere, ma in pratica è stato ripetutamente mostrato che richiede un programmatore per essere modificato, quindi è uno sforzo con un ritorno discutibile (anche se potrebbe essere un punto di forza).

(Modifica) Mentre guardavo i tavoli delle decisioni, non sembravano molto flessibili. Hanno bisogno di una colonna per ogni possibile criterio, così come le regole crescono in complessità, la tabella avrà bisogno di un numero sempre maggiore di colonne e in ogni caso non sarà più facile capire di più.

Inoltre, non dimenticare che un pacchetto di e-commerce non vive nel vuoto, ma deve essere integrato con vari altri sistemi. La maggior parte dei negozi probabilmente dispone già di un sistema di contabilità in cui è necessario esportare i dati sulle transazioni finite e sul sistema di gestione dei negozi in cui è necessario esportare i dati sulle merci da spedire o nel caso in cui gli account dei negozi di software creino e le licenze da assegnare. diverso processore di pagamento a cui devi reindirizzare e ricevere conferma di pagamento, ecc. Per questi la logica sarà diversa, quindi le regole semplici non lo taglieranno. Devi assolutamente supportare la scrittura di questo in PHP, indipendentemente dal core principale, proprio come le regole aziendali che hai menzionato.

    
risposta data 23.07.2013 - 14:49
fonte
3

Per i miei scopi ho considerato link - un motore di regole di produzione. È applicabile alle tue esigenze: offri al cliente X uno sconto del 10% sul prodotto Y se lo impacchetta con il prodotto Z.

Proverò a scrivere una sorta di pseudo-codice:

Context: your shopping cart items
Rules: cart contains ProductY and ProductZ
Execute: ProductY->discount(10%)
    
risposta data 30.01.2014 - 13:48
fonte
1

Abbiamo appena rilasciato il nostro Decision Tables Engine che può prendere decisioni sui dati che invierai. Dai un'occhiata, forse si adatta alle tue esigenze.

Devi semplicemente inviare i dati ad esso e impostare un set di regole (senza codifica) che restituiscano una decisione al tuo prodotto. Inoltre puoi riutilizzare queste regole in qualsiasi altro progetto.

link

Penso che al momento sia l'unico motore di decisione gratuito con codice aperto costruito su PHP. Un'altra alternativa gratuita è Drools (funziona su Java JBoss) che è stato consigliato in altre risposte.

    
risposta data 15.03.2016 - 22:25
fonte