【问题标题】:Putting logic into JSON data将逻辑放入 JSON 数据中
【发布时间】:2016-03-24 13:12:49
【问题描述】:

我们团队中有一位工程师希望在 JSON 数据中执行以下操作:

“可见”:“$(= state 'state_c')”

现在在模型中他有以下方法来判断状态:

protected function getCurrentState():String
{
   var state:String = "defaultState";

   if (xxxx)
      state = "state_A";
   else if (xxxx)
      state = "state_B";
   else if (xxxx)
      state = "state_C";
   else
      state = "state_D";

   return state;
}

现在,每当我需要更新状态时,我都会在其他地方调用以下命令:

data.state = getCurrentState();

如果您好奇的话,JSON 数据中使用的表示法是前缀表示法 (LISP)。模型所在的代码是用AS3编写的,上面名为'data'的对象是Object类型的。

我反对这个想法,我不明白将逻辑放入数据的价值。我从未见过会以这种方式使用的范例。我认为这打破了 MVC 架构设计并引入了许多不同的问题。这是我对这个设计最大的问题:

1) 所有逻辑都是类型不安全的(数据是类型不安全的)

2) 现在开发者必须知道如何做三件事来完成一项任务(编写 JSON 数据的程序员部分,编写正确的前缀表示法,以及在代码中放入正确的逻辑)

3) 我看不到对这种行为进行单元测试的好方法

4) 将逻辑扩展到多个代码区域,从而使查找错误更加困难。

我正在寻找有关此问题的任何意见。为什么这是个好主意?我不喜欢它的理由有效吗?我缺少一些价值吗?

【问题讨论】:

  • 首先,这可能会因为“主要基于意见”而被关闭。其次,我没有在这里连接零件。 getCurrentState 函数看起来不错。使用data.state = getCurrentState(),其中dataObject,而不是具有state 属性的类不是IMO 的好主意。但是这些东西与时髦的"visible": "$(...)" 代码有什么关系呢?它们有什么关系?是否有一些 AS3 代码可以解析该表达式并将其与 data.state 进行比较?那个代码在哪里?它是什么样子的?什么时候调用?
  • 是的,我意识到这主要是基于意见,但是我一直在寻找任何一种验证方式。时髦的代码是相关的,因为它会根据您在 AS3 代码中更改的状态来更改可见性。有解析表达式的 AS3 代码。该 AS3 类在收到数据时对其进行解析,并将其置于典型的数据模型中。数据模型是 currentState 函数存在的地方。这是否有助于您更好地理解问题?由于上述所有原因,我仍然坚信这是一个糟糕的设计决定
  • 是的,这是一个很好的讨论,我只是提醒您,SO 不喜欢基于意见的问题。我个人没有问题。关于代码设计,我同意存在您所说的各种问题。 IMO 编写自定义字符串解析器不是使用语言(在您的情况下为 JSON 和 AS3)的良好通用方式。 JSON是一种数据传输,AS3是一种编程语言,逻辑应该在AS3中。祝你好运。

标签: json actionscript-3 data-driven


【解决方案1】:

你所有的论点都是正确的。我不会在这里详细介绍具体细节,因为not using eval 的所有相同论点都适用并且已经过广泛讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多