【发布时间】:2012-11-01 19:13:19
【问题描述】:
我遇到了一个应该使用域模型中的策略模式的示例。我有一个代表系统用户的 User 类。每个用户在使用系统时可能会收到请求。收到请求后,可能会有一些处理逻辑:
- 自动删除请求
- 通知用户收到的请求
- 等等...
在这种情况下,似乎调整了策略模式。我有一个名为 RequestReceivedPolicy 的接口,其中有多个实现此接口的类(即每个处理逻辑一个类)。 User 类持有与所选策略对应的类的一个实例的引用。
这在对象方面似乎是正确的。我的问题涉及持久性方面,在我的情况下,它是一个关系数据库。用户通过管理界面选择策略。我想保留此选择,以便下次用户登录时保存此信息。我曾考虑将实例保存在 User 类中,但我认为这不是正确的方法,因为此实例更多的是关于逻辑而不是数据。
谢谢
编辑:
public RequestReceivedPolicy {
public boolean processRequest();
}
public IgnoreRequestPolicy implements RequestReceivedPolicy {
public boolean processRequest(){
//ignore logic
}
}
public CustomRequestPolicy {
private int someData1;
private String someData2;
public boolean processRequest(){
//custom logic that uses someData1 and someData2
}
}
【问题讨论】:
-
视情况而定。您需要
RequestReceivedPolicy实例的详细信息,还是只需要了解与用户相关联的接收请求策略类型? -
@neontapir 由于每种策略类型都有处理所需的相关信息,我认为我需要这些信息和策略类型。
-
建立一个使用数据表示逻辑模型的标准,就像规则引擎一样。我认为这个概念有一个术语,但我想不出一个名字。基本上,您希望您的控制器以数据的形式使用模型指令,然后您将其持久化取决于您。如果我正确理解您的问题。
-
@foampile 对不起,我不明白你的评论。你能给我一些例子或资源吗?
-
我所说的“使用数据表示逻辑模型的标准”的意思是,不是在应用程序层中编写业务逻辑,而是建立一个通过数据定义逻辑的约定,有点像你自己的4GL,您将通过它向控制器传递指令,控制器根据这些指令告诉它做什么来做不同的事情。另外,请查看:en.wikipedia.org/wiki/Convention_over_configuration
标签: design-patterns strategy-pattern