2013-04-24 34 views
2

我有以下的情況下(這適合較大的MVC框架)分離的關注 - 如何實現這一代碼

有一個大的XML配置,它定義了可用於的特定功能的模型類型系統:

<object_type1_config> 
    <type_id>1</type_id> 
    <type_model>amazinTypeModel</type_model> 
    <config_value1>blah</config_value1> 
    <config_value2>blah blah</config_value2> 
</object_type1_config> 

在一個控制器,並且根據某些請求參數我可以決定在運行時要使用的模型,並確定渲染的模板等

一個附加的複雜性在於,如果某些值不目前在confi中對於那個模型類型,那麼可以使用默認的一組值。這個默認的一組值將被用作所有possble對象類型的默認值。

問題是,控制器正在充滿邏輯來解析此配置值以獲取參數,然後根據這些參數做出決定。

所以把它移出到另一個類是有意義的,但是這裏使用的最好的設計模式是什麼,因爲控制器實際上仍然必須解析配置以便首先獲得模型類型。然後它必須安裝模型類型並查詢它的值。

我不能在這裏看到的解耦事情任何方式

回答

0

你可以做這樣的事情

class Controller { 
    Parser parser; 

    Model getModel() { 
     return parser.parseModel(userInput); 
    } 

    Template getTemplate() { 
     return parser.parseTemplate(userInput); 
    } 
} 

等等,其中解析器已經有默認的配置值的參考(中硬編碼解析器,例如作爲屬性文件名,或者傳遞給它的構造函數)。你可以通過構造函數/設置器來設置Parser,或者如果你使用Spring,你可以自動裝載它。

+0

還有1個其他要求,讓我快速更新問題 – 2013-04-24 16:13:48

+0

好的,我已更新。它與默認值 – 2013-04-24 16:15:19

+0

我已更新我的答案以反映這些更改 – 2013-04-24 16:16:42