2013-04-24 46 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