none
Как проверять поля объекта согласно определенным "правилам" и как хранить эти "правила"? RRS feed

  • Вопрос

  • Здравствуйте!

    Нужен совет, как лучше организовать проверку объектов. Опишу ситуацию

    Существует множество объектов класса

    class MyObject
    {
     decimal x;
     decimal y;
     decimal z;
    }
    
    

    Необходимо проверять, соответствуют ли поля объектов определенным "правилам". К примеру 2x-z>3y/x, x>y, z!=y/2 и т.п.

    Можно было бы делать проверку так

    public static class Rule_1
    {
     public static bool Check(MyObject ob)
     {
       if (ob.x>ob.y) return true;
       return false;
     }
    }
    
    public static class Rule_2
    {
     public static bool Check(MyObject ob)
     {
       if (ob.x*ob.z=ob.y/2) return true;
       return false;
     }
    }
    
    public class Pattern
    {
     public bool Check(MyObject ob)
     {
      if (!Rule_1.Check(ob)) return false;
      if (!Rule_2.Check(ob)) return false;
      return true;
     } 
    }
    ...
    MyObject myObject = new MyObject (1,2,3);
    Pattern p = new Pattern();
    if (p.Check(myObject)) ...do smth
    

    Однако очевидно, что "правил" может быть сколько угодно, и создавать 1000 классов подобных классам Rule_1, Rule_2 неразумно. 

    Как лучше поступить в данном случае, чтобы не создавать отдельные классы и/или методы для проверки на каждое "правило"? Крутятся идеи, как это можно удобно обобщить, но пока все не то... 

     

    21 февраля 2011 г. 16:51

Ответы

Все ответы