2014-09-10 62 views
0

我想允許用戶指定的函數計算某些屬性,並希望這個函數存儲在一個泛型類。也就是說,類的每個實例都具有相同的接口,但調用'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

我建議,你有相關的類層次結構,一個用於每個電流計算功能的變化,和表類名字段和每個運行它的參數不同的方法。

由於類都將遵循相同的接口,這應該很好地工作。然後,您可以乾淨地清理用戶輸入,並避免讓用戶直接在服務器上放置可執行代碼的可怕安全隱患。

+0

事情是,我可能有10多種不同的計算方法,我是否需要爲每個人和每個人劃分子類? – Tarlen 2014-09-10 11:12:30

+0

@Tarlen他們有什麼不同?如果函數是複雜的,算法依賴於變量,分離成不同的類是有意義的。如果使用不同參數的算法是相同的,只需要一個類,並將參數存儲在數據庫中,而不需要類名。 – 2014-09-10 11:37:51

相關問題