2010-08-18 9 views
1

Je vais lire régulièrement certains états discrets, et en appliquant quelques règles aux différences d'états, je rapporterai quelques erreurs. Les règles peuvent être modifiées à temps.Conception basée sur les règles

Quelles sont les meilleures pratiques pour résoudre un tel problème?

Merci.

+0

Les règles peuvent être modifiées dans le temps cela signifie-t-il en temps réel? – DumbCoder

+0

Pas nécessairement, mais entendre des idées à propos de temps réel pourrait être agréable. – metdos

Répondre

2

J'utiliserais aussi le motif singleton, en dehors de celui de Strategy. Une mise en oeuvre possible (. Bien que ce soit tout à fait ouvert, si vous voulez un ensemble flexible de règles que vous devraient utiliser une autre classe pour l'entité « Règle » Cependant, cette façon, il est plus simple à comprendre):

class Rules { 
public: 
    virtual bool rule_1(Data *) = 0; 
    // ... 
    virtual bool rule_n(Data *) = 0; 

    static Rules * getRules() 
     { 
      // The only place in which to change the rule set 
      if (ruleSet == NULL) ruleSet = new Rules_September2010(); 
      return ruleSet; 
     } 
protected: 
    Rules(); 
    static Rules * ruleSet; 
}; 

class Rules_August2010 : public Rules { 
public: 
    bool rule_1(Data *); 
    bool rule_n(Data *); 
}; 

class Rules_September2010 : public Rules { 
public: 
    bool rule_1(Data *); 
    bool rule_n(Data *); 
}; 

de Bien sûr, c'est une indication de l'en-tête (s). Les fichiers d'implémentation sont manquants. J'espère que cela t'aides.

0

Vous pouvez utiliser un moteur de règles. Il y a beaucoup de moteurs de règles dans java, je ne suis pas sûr de savoir C++. Cette post peut vous aider.

3

Ce qui me vient à l'esprit est le Gof 'Design Pattern appelé Strategy.

Vous codez vos règles dans les objets Stratégie concrète. Ainsi, vous pourriez avoir un objet spécifique Concrete Strategy qui change dans le temps. Mais le mieux est de changer les objets de la stratégie concrète pour refléter la nouvelle règle, à mon humble avis.

Le lien wikipedia a un exemple en C++. Mais si vous êtes nouveau à concevoir des modèles et/ou besoin d'explications supplémentaires à ce sujet, il suffit de demander.

+0

+1 pour le patron de stratégie –

Questions connexes