解析方法,并将其存储在数据库

问题描述:

我想允许用户指定的函数计算某些属性,并希望这个函数存储在一个泛型类。也就是说,类的每个实例都具有相同的接口,但调用'calculate'方法的结果因用户提供的函数而异解析方法,并将其存储在数据库

我还想序列化此类并将其存储在数据库中供以后使用使用。这就是我在想的

class LogicalCharge < Charge 
    attr_reader :name, :type, :formula, :threshold 

    def initialize(name: nil, type: nil, formula: nil, threshold: nil) 
     super(name: name, type: type) 
     @formula = formula 
     @threshold = threshold 
    end 

    def parse(formula: nil) 

    end 

    def calculate(dimensions: nil) 
     parse(formula: formula).call(dimensions) < threshold 
    end 

有关如何从这里继续下去的任何建议?

+4

执行用户提供的代码?坏的主意(来自安全POV) – 2014-09-10 10:01:30

+0

对另一种方法有何建议? – Tarlen 2014-09-10 11:13:14

我建议,你有相关的类层次结构,一个用于每个电流计算功能的变化,和表类名字段和每个运行它的参数不同的方法。

由于类都将遵循相同的接口,这应该很好地工作。然后,您可以干净地清理用户输入,并避免让用户直接在服务器上放置可执行代码的可怕安全隐患。

+0

事情是,我可能有10多种不同的计算方法,我是否需要为每个人和每个人划分子类? – Tarlen 2014-09-10 11:12:30

+0

@Tarlen他们有什么不同?如果函数是复杂的,算法依赖于变量,分离成不同的类是有意义的。如果使用不同参数的算法是相同的,只需要一个类,并将参数存储在数据库中,而不需要类名。 – 2014-09-10 11:37:51