作爲一個解析器庫的一部分,我的對象層次結構如下:耦合對象層次和操作
ParseEntry | | /\ / \ / \ NumericParseEntry StringParseEntry
等,
這些對象基本保存數據。然後,我有一組操作,比如評估(評估值是否通過解析條目標準),generateSQL(根據解析條目生成SQL條件)。
由於單一職責原則,我不想將這些函數添加到特定的分析條目類,並且想要維護爲分析條目層次結構實現這些功能的單獨層次結構。這允許我爲一個以上的解析條目重用某個實現。
我想知道如何將操作與對象耦合,以便在瀏覽解析表的解析表執行某些操作時,我應該能夠獲得相應的操作對象。
我能想到的一個原始方法是擁有一個工廠類,它在解析條目類型及其相應的評估器/ SQLgenerator之間維護映射。另一種方法是將評估程序/ sql生成器嵌入爲解析條目的數據成員,並將其返回到getter中。
對此即興創作任何幫助將不勝感激。
感謝您的意見。我同意這樣的觀點:這些操作本質上應該在特定的語法分析類中實現。我喜歡你的想法,將評估代碼移到單獨的層次結構中,並通過合成將它們包含在解析條目中。 – Vikdor 2012-07-16 06:28:34