我有一个用于编辑产品的网页,并且用户界面具有不同的行为,具体取决于产品类型。
包含之类的细微变化:
对于一种产品类型,特定字段是强制性的,下拉列表对两种产品类型的选项较少,对不同的URL进行ajax
调用等。
1 /如何在JavaScript中编写“优雅”代码,因此我想尊重开放式原则并避免出现以下情况:
var idType = $('#idtype').val();
if (idType == 3)
...
2 /有没有办法在JavaScript中使用"enums"
?
3 /是否存在涉及这种情况的设计模式?我所知道的最近的是Strategy
模式。
4 /在我的情况下,可以在JavaScript
代码中处理这些更改。但是,当客户端和服务器端的行为不同时,我建模的情况应该怎样?
答案 0 :(得分:0)
不是原生模式,但您可以模拟一个,例如:
var MyEnum = {
LittleBall: 1,
MediumBall: 2,
BigBall: 3
};
var idType = parseInt($("#idtype").val(), 10);
switch(idType) {
case MyEnum.LittleBall:
// do stuff here
break;
case MyEnum.MediumBall:
// do stuff here
break;
case MyEnum.BigBall:
// do stuff here
break;
default:
break;
}
您对模式的意思是什么?
答案 1 :(得分:0)
这就是存在继承的原因。将“正常”方案放入Product
。将其设为ThatProductWithFewerOptions
,ThatProductWithMandatoryField
等的原型。覆盖与常规Product
不同的函数。有一个从ID映射到产品构造函数的查找;如果它不是特殊的,你可以使用Product
。然后,只需致电product.checkMandatoryFields()
,product.ajaxURL
等,不再需要if
s。
或者,处理服务器端的所有差异(再次,类工作奇迹)。这样您就不需要两次实现所有内容。或者,如果您有Node.js服务器端,则相同的代码可以在两端运行。
我认为这是工厂模式,如果我真的需要命名它(Product.getInstanceFor(idType)
)。