UI行为取决于类型 - 背后的模式是什么?

时间:2014-04-04 05:09:02

标签: javascript asp.net design-patterns

我有一个用于编辑产品的网页,并且用户界面具有不同的行为,具体取决于产品类型。

包含之类的细微变化:  对于一种产品类型,特定字段是强制性的,下拉列表对两种产品类型的选项较少,对不同的URL进行ajax调用等。

1 /如何在JavaScript中编写“优雅”代码,因此我想尊重开放式原则并避免出现以下情况:

var idType = $('#idtype').val();
if (idType == 3)

...

2 /有没有办法在JavaScript中使用"enums"

3 /是否存在涉及这种情况的设计模式?我所知道的最近的是Strategy模式。

4 /在我的情况下,可以在JavaScript代码中处理这些更改。但是,当客户端和服务器端的行为不同时,我建模的情况应该怎样?

2 个答案:

答案 0 :(得分:0)

  1. 您可以使用开关,查看下面的示例。
  2. 不是原生模式,但您可以模拟一个,例如:

    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;
    }
    
  3. 您对模式的意思是什么?

  4. 您的客户端行为绝不应与服务器端行为不同。

答案 1 :(得分:0)

这就是存在继承的原因。将“正常”方案放入Product。将其设为ThatProductWithFewerOptionsThatProductWithMandatoryField等的原型。覆盖与常规Product不同的函数。有一个从ID映射到产品构造函数的查找;如果它不是特殊的,你可以使用Product。然后,只需致电product.checkMandatoryFields()product.ajaxURL等,不再需要if s。

或者,处理服务器端的所有差异(再次,类工作奇迹)。这样您就不需要两次实现所有内容。或者,如果您有Node.js服务器端,则相同的代码可以在两端运行。

我认为这是工厂模式,如果我真的需要命名它(Product.getInstanceFor(idType))。