最佳实践之JS-状态模式
2016-09-01 09:23
323 查看
前因:
项目接口会返回很多状态码,通常的做法是使用ifelse 去处理状态,或者将if else 封装成一个方法,调用但是即便用方法封装,还是完全避免用 if else 去处理状态,今天我们采用一种新的尝试,使用状态模式来进行N多种状态的下的逻辑处理,来避免N多种状态下反锁的if else 语句维护困难的问题。
状态模式:不同的状太会产生不同的行为,即当一个对象内部状态改变时,会导致其行为发生变化。
实践:
IVR项目中提交预约回电时,场景不同会有不同的错误码,如20,30,40,50……等等,如果采用if else 语句判断会非常繁琐并难以维护,采用状态模式就方便很多,具体实践如下:
首先定义一个状态类,根据不同状态定义不同行为,并最终对外提供一个API,
var ExecuteState = function(){
var StatesFn = {
states_7:function(data){
//功能代码
},
state_20:function(data,currentTime){
//功能代码
},
state_30:function(data,currentTime){
//功能代码
},
state_40:function(data,currentTime){
//功能代码
}
function executeFn(state,data,currentTime){
StatesFn['state_'+state] && Sta
4000
tesFn['state_' +state](data,currentTime);
}
return {
execute:executeFn
}
}();
调用API:ExecuteState.execute(state,data,currentTime);
如此就打打减少了ifelse 使用量,当状态模式使用到极致时,程序中是没有if else 出现的,当然如果需求很稳定,很简单的一个分支判断就可以搞定的情况下,如果采用状态模式实现,这样开发成本会很高,所以应该根据项目实际情况制定相应的实现方案,个人观点,如有雷同,纯属巧合。
项目接口会返回很多状态码,通常的做法是使用ifelse 去处理状态,或者将if else 封装成一个方法,调用但是即便用方法封装,还是完全避免用 if else 去处理状态,今天我们采用一种新的尝试,使用状态模式来进行N多种状态的下的逻辑处理,来避免N多种状态下反锁的if else 语句维护困难的问题。
状态模式:不同的状太会产生不同的行为,即当一个对象内部状态改变时,会导致其行为发生变化。
实践:
IVR项目中提交预约回电时,场景不同会有不同的错误码,如20,30,40,50……等等,如果采用if else 语句判断会非常繁琐并难以维护,采用状态模式就方便很多,具体实践如下:
首先定义一个状态类,根据不同状态定义不同行为,并最终对外提供一个API,
var ExecuteState = function(){
var StatesFn = {
states_7:function(data){
//功能代码
},
state_20:function(data,currentTime){
//功能代码
},
state_30:function(data,currentTime){
//功能代码
},
state_40:function(data,currentTime){
//功能代码
}
function executeFn(state,data,currentTime){
StatesFn['state_'+state] && Sta
4000
tesFn['state_' +state](data,currentTime);
}
return {
execute:executeFn
}
}();
调用API:ExecuteState.execute(state,data,currentTime);
如此就打打减少了ifelse 使用量,当状态模式使用到极致时,程序中是没有if else 出现的,当然如果需求很稳定,很简单的一个分支判断就可以搞定的情况下,如果采用状态模式实现,这样开发成本会很高,所以应该根据项目实际情况制定相应的实现方案,个人观点,如有雷同,纯属巧合。
相关文章推荐
- Spring构建应用系统的最佳架构与模式实践(1)
- EJB 最佳实践: 业务委派模式
- SCRUM模式项目管理在VS2010上的最佳实践LiveMeeting
- Silverlight常用控件最佳实践之1.自定义TabControl禁用状态
- 英国电信设计模式最佳实践
- 英国电信设计模式最佳实践
- 虚拟研讨会:Node.js生态系统之框架、库、最佳实践
- SCRUM模式项目管理在VS2010上的最佳实践LiveMeeting
- SCSF 系列:Smart Client Software Factory 中 MVP 模式最佳实践
- JS trim去空格的最佳实践
- 持久化模式,第 1 部分:现代 ORM 工具的策略和最佳实践
- MVP模式最佳实践(1)—MVP模式简介
- 从工作流状态机实践中总结状态模式使用心得
- SCRUM模式项目管理在VS2010上的最佳实践LiveMeeting
- .net最佳实践二:使用finalize/dispose模式提升垃圾回收器性能
- 从工作流状态机实践中总结状态模式使用心得(转载)
- [最佳实践]在Scrum敏捷软件开发模式中,我们是如何开Sprint 计划会议的
- 持久化模式,第 1 部分: 现代 ORM 工具的策略和最佳实践,使用 Hibernate 特性在领域模型上应用面向对象原则
- [转] 虚拟研讨会:Node.js生态系统之框架、库、最佳实践
- 精通MVC3摘译(5)-使用URL模式最佳实践