2010-04-23 5 views
1

Je développe une application Java EE 6 où les «fournisseurs» devraient être en mesure de définir un prix et des réductions différentes sur un service pour les utilisateurs. Il y a beaucoup de fournisseurs différents. Chacun fournit le même service, les modèles de tarification peuvent être différents.Comment implémenter un modèle de tarification dans Java EE - via un moteur de règles?

Prix Modèle: - Un fournisseur devrait être en mesure de définir le prix par ex. par heure, par minute, par processus, .... - Le fournisseur devrait être en mesure d'ajouter facilement des conditions pour définir la remise qu'un utilisateur obtient. Par exemple: les utilisateurs d'un groupe d'utilisateurs spécifique bénéficient d'une réduction de 10% et les utilisateurs qui ont utilisé le service plus de 5 fois bénéficient d'une autre réduction. - Il devrait être capable de lier des conditions avec des opérations logiques comme "ET" ou "OU". - Le nombre de conditions possibles doit être défini par le fabricant du logiciel. Lorsqu'un utilisateur tente d'accéder au service, le prix spécifique à l'utilisateur doit être indiqué. Après avoir utilisé le service, l'utilisateur reçoit parfois une facture indiquant le coût total de ce service. Lors de l'utilisation du service, le fournisseur peut modifier le modèle de tarification, il doit donc y avoir un numéro de version ou quelque chose du genre. Les versions du modèle de tarification doivent ensuite être enregistrées dans une base de données. La question est - Est-il possible et utile d'utiliser un moteur de règles pour résoudre cette spécification? Le fournisseur doit définir des conditions sans fichiers xml ou quelque chose comme ça, juste en cliquant et en choisissant. Je n'ai aucune expérience avec les moteurs de règles ... alors peut-être que quelqu'un peut m'aider à trouver la meilleure solution pour le problème.

Répondre

0

Tout d'abord, vous devez connaître toutes les variables possibles. Vous mentionnez les number of times someone has used a service et group membership. Peut-être plus de travail que vous ne le pensez si l'ensemble de variables peut changer.

Ensuite, le niveau de complexité des règles qui doivent être prises en charge. Vous n'avez peut-être pas besoin d'un moteur de règles complet. Vous pouvez aller très loin avec des évaluations d'expression simples, voir https://eval.dev.java.net par exemple.

Si vous optez pour l'évaluation d'expression, il vous suffit de stocker chaque version du modèle de tarification comme une chaîne propre dans une base de données ou quelque chose comme ça. Vous pourriez vouloir des règles de pointer-cliquer, mais souvent la contrepartie écrite est beaucoup plus claire.

+0

Le plus important est de créer un modèle de tarification flexible pour le fournisseur. Toutes les variables qui me viennent à l'esprit sont. * Appartenance à un groupe. * Nombre de fois que quelqu'un a utilisé le service. * La durée pendant laquelle un utilisateur utilise le service par mois/année. * Utilisateurs ayant des propriétés spécifiques (par exemple, tous les utilisateurs de xTown). * heure à laquelle le service est utilisé (par exemple, de 20h00 à 12h00). C'est suffisant quand vous pouvez concaténer des règles avec les opérations logiques ET et OU. Peut-être que l'évaluation d'expression n'est pas suffisante. Est-il possible d'utiliser des objets dans les expressions et de conserver ces expressions? –

+0

'Eval '(auquel j'ai lié ci-dessus) supporte l'opérateur ternery'? 'Ainsi que AND, OR: (usedService> 5 && isMember = 1? Discount = 0.1: discount = 0.0). Les expressions sont nécessaires d'une manière ou d'une autre si vous voulez un modèle de tarification flexible. – bitc

+0

D'accord, je comprends, merci! –