在我的应用程序中,我在28个州上使用状态模式。这些状态是针对有7个主要状态的会员卡,有4个布尔属性对会员卡的行为有实际影响,所以我决定将它们嵌入到状态中,这就是它如何乘以28个状态。
现在的问题是状态类的命名,它变得越来越疯狂,我的类状态被命名为这个Membership-UnderCreation-Printed-Linked-Premium-Frozen --我用不同的属性来表明这一点。
国名可以这样吗?
发布于 2013-09-11 11:18:02
这不是我个人会选择的策略。我会定义这7个状态,并将这4个属性定义为应用程序对象的属性。然后,您必须基于可能将状态更改应用于应用程序的这些属性定义应用于应用程序的业务规则。
这种方法的好处是,附加的业务规则在代码中作为可维护的附加业务规则来实现。
在您的设计中,您正在将业务规则编码到状态机中,这意味着随着时间的推移,随着业务规则的引入,状态机将增长并变得完全不可维护。
例如:
public decide_next_state(IApplication application, Dictionary<state, List<IBusinessRules>> rules)
{
// by default we remain in the current state.
next_state = application.current_state
foreach(state in rules.keys())
{
bool matched = true;
foreach(rule in rules[state])
{
// if this business rule blocks the transition, then it
// returns false.
if rule.apply(application) == false
{
matched = false;
break;
}
}
if(matched == true)
{
next_state = state;
break;
}
}
return next_state;
}现在,使用此代码,您将传递应用程序当前状态的规则字典。然后,规则定义当前应用程序将转换到哪个状态。但是,只有在该转换的所有业务规则允许的情况下,它才能进行该转换。
这是一个非常简单的模型,但如果需要的话,它可以变得更加复杂。
https://softwareengineering.stackexchange.com/questions/211117
复制相似问题