Как лучше всего импортировать объект (полученный из JSON-декодирования) в класс MooTools? - PullRequest
2 голосов
/ 09 сентября 2010

У меня есть класс с именем Пользователь , определенный с помощью класса MooTools.Этот класс содержит метод получения с именем fullName (который обрабатывает firstName и lastName ).

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

Я могу запросить список профилей пользователейиз бэкэнда Java через AJAX и получить ответ JSON, в основном массив объектов Javascript.

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

Есть ли рекомендуемый способ преобразования этого массива DTO в классы MooTools User ?

Я мог бы использовать Array.each и создать новый экземпляр Пользователь , передав каждому DTO firstName и lastName значение в конструкторе.Или, возможно, передайте сам DTO и используйте:

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

Я смотрю на $extend(myClass, myDTO), который копирует свойства myDTO в myClass.Кажется, в настоящее время это самый простой вариант.

Было бы неплохо узнать рекомендуемый способ копирования значений DTO.Большое спасибо!

1 Ответ

2 голосов
/ 10 сентября 2010

Лично я написал бы функцию для преобразования DTO в пользователя и затем отобразил бы список 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 в пользователя в одном «месте», - это хорошо для архитектуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...