Так что нет единого правильного ответа на этот вопрос;однако я могу предложить вам несколько советов о том, как мне решить эту проблему.
Прежде всего вам потребуется загрузить и проанализировать весь XML-документ;вы захотите получить данные, преобразованные в объекты ActionScript 3 (объекты модели) за один проход, а затем отбросить объект XML;причина в том, что доступ к свойствам объекта XML в AS3 очень, очень медленный .Написание парсера довольно просто;(Кстати: я написал довольно глубокое сообщение в блоге о сортировке данных в и из XML );ради этого ответа давайте предположим, что у вас есть XML-документ, который выглядит примерно так:
<group name="AS3 Developers">
<member name="jonnyreeves" rep="440" />
<member name="mheavers" rep="243" />
</group>
Наиболее локальный граф объекта модели будет состоять из Group
Model и Member
ModelНапример:
public class Group {
public var name : String;
public var members : Array; /* of Member objects */
}
public class Member {
public var name : String;
public var rep : uint;
}
После того, как ваш синтаксический анализатор поработал над XML-документом, у вас останется массив объектов Group;затем его следует сохранить в новой модели, которая может предоставить вам быстрый и легкий доступ к содержащимся в нем данным:
public class GroupListModel {
private var _groups : Array;
public function GroupListModel(groups : Array) {
_groups = groups;
}
public function getGroup(name : String) : Group {
// TODO Use a lookup table here instead.
for each (var group : Group in _groups) {
if (group.name == name) {
return group;
}
}
return null;
}
public function getMembersWithRepGreaterThan(value : uint) : Array {
const result : Array = [];
for each (var group : Group in _groups) {
for each (var member : Memeber in group) {
if (member.rep > value) {
result.push(member);
}
}
}
return results;
}
}
Таким образом, вы можете сохранить все методы поиска (и модификации) внутри GroupListModel;улучшение инкапсуляция .
Итак, что касается их отображения - это зависит от того, как вы планируете представлять их Пользователю.Я бы согласился с тем, что вы не хотите заблаговременно создавать все объекты DisplayObject, связанные с участником, заранее, если их много, или объект DisplayObject стоит дорого из-за его сложности.
Существует несколько подходов, которые вы можете использовать, разбивая содержимое на страницы, которое вы можете использовать в стиле ItemRenderer , где экземпляры создаются только тогда, когда они требуются.Другой вариант - использовать сбрасываемые объекты View, которые можно поместить в ObjectPool для последующего повторного использования.Какой бы подход вы ни использовали в конечном итоге, я бы рекомендовал помнить о золотом правиле - «Не усложняйте» - сначала включите его, а потом заботитесь о производительности и использовании памяти.
Наконец, было бы упущением для меняне говоря уже о том, что существуют фреймворки для решения таких архитектурных проблем, наиболее популярными из которых являются PureMVC и RobotLegs ;Я предлагаю вам потратить некоторое время на изучение того, как они работают, если вы заинтересованы в улучшении своего ремесла.