java - 关注点分离——如何用这段代码实现

标签 java design-patterns decoupling

<分区>

我有以下场景(这适合更大的 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>

在 Controller 中,根据特定的请求参数,我可以决定在运行时使用哪个模型并确定要呈现哪个模板等。

一个额外的复杂性是,如果某些值不存在于该模型类型的配置中,则可以使用一组默认值。这组默认值将用作所有可能对象类型的默认值。

问题是 Controller 中充满了解析此配置值以获取参数然后根据这些参数做出决策的逻辑。

所以将它移到另一个类是有意义的,但是这里使用的最佳设计模式是什么,因为 Controller 实际上仍然必须解析配置才能首先获取模型类型。然后它必须实例化模型类型并查询它的值。

我在这里看不到任何解耦的方法

最佳答案

你可以这样做

class Controller {
    Parser parser;

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

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

等等,其中解析器已经有对默认配置值的引用(在解析器中硬编码,例如作为属性文件名,或传递给它的构造函数)。您可以通过构造函数/ setter 设置解析器,或者如果您使用的是 Spring,则可以 Autowiring 它。

关于java - 关注点分离——如何用这段代码实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196804/

相关文章:

java - 将 DataMap 转换为字符串或字符串数​​组

java - 您是否通过将方法内变量声明为属性来节省垃圾收集器的工作?

java - Java从单链表中删除第一个节点

asp.net - 在数据访问层和业务层上实现哪种模式?

user-interface - 在 Scala 中改进 MVP

android - Android 上的嵌套 MVP : how to

java - 两个 HashMap 的一般合并

java - OO 设计问题接口(interface)和类

java - 快速响应的总线和REST服务解耦?

interface - 通过 Go 中的接口(interface)解耦......接口(interface)实现者的一部分?