【问题标题】:How best to import an Object (obtained from a JSON decode) into a MooTools Class?如何最好地将对象(从 JSON 解码中获得)导入 MooTools 类?
【发布时间】:2010-09-10 11:44:39
【问题描述】:

我有一个使用 MooTools 类定义的名为 User 的类。此类包含一个名为 fullName 的 getter(它操作 firstNamelastName)。

var User = new Class({
 initialize:function(firstName, lastName){
  this.firstName = firstName;
  this.lastName = lastName;
 },
 fullName:function(){
  return this.firstName + ' ' + this.lastName;
 }
});

我可以通过 AJAX 从 Java 后端请求用户配置文件列表并获得 JSON 响应,基本上是 Javascript 对象数组。

[{firstName:'John', lastName:'Doe'},{firstName:'Bob', lastName:'Hope'},....]

有没有推荐的方法将此 DTO 数组转换为 MooTools User 类?

我可以使用 Array.each 并通过传递每个 DTO 的 firstNamelastName 创建一个新的 User 实例> 构造函数中的值。或者也许传递 DTO 本身并使用:

$each(userDTO,function(value,key){...}

我正在查看 $extend(myClass, myDTO),它将 myDTO 的属性复制到 myClass 中。似乎是目前最简单的选择。

很高兴知道复制 DTO 值的推荐方法。非常感谢!

【问题讨论】:

    标签: javascript mootools


    【解决方案1】:

    就个人而言,我会编写一个函数来将 DTO 转换为 User,然后通过该函数映射 DTO 列表:

    var dtos = ...
    var f = function(dto) { return new User(dto.firstName,dto.lastName) };
    var users = dtos.map(f);
    

    这是其他语言中的常用方法(可以归类为“工厂方法”模式的一个实例)——我认为没有理由不在 javascript 中使用它。

    它可能看起来不如(例如)“酷”:

    var users = dtos.map(function(dto){ return $extend(new User(),dto); });
    

    但 DTO 可能会发生更改(重命名、删除或 - 很可能 - 添加字段),并且将这些更改自动(即:不受控制地)传播到您的类并不是一个好主意。

    此外,将有关如何将 DTO 转换为用户的所有知识都放在一个“地方”是架构方面的好事。

    【讨论】:

    • 同意!我喜欢函数/映射方法,可以在构造函数或 $extend 方法之间进行选择。
    猜你喜欢
    • 2021-12-18
    • 2021-08-31
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多