Показать сообщение отдельно
Старый 09.11.2012, 16:05
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 11  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Пока не понимаю как лучше реализовать считывание-сохранение. Что лучше - в каждый класс графического объекта добавить методы по сереализации/десереализации или делать считывание/сохранение отдельными классами?
На сериализации это даст какую-то гибкость, но десериализовывать всё равно придется свичами.
Я бы не стал в классы что-то добавлять.
Просто один класс Сериализатор/Десеарелизатор, с методами
serialize(наборOбъектов):XML
deserialize(xml:XML):Набор объектов
А в методах - разбор свичами.

Есть, конечно, вариант без свичей:
- заносим в список набор сериализаторов и одновременно десериализаторов на каждый тип объекта
- регистрируем в словарике сериализатор на тип объекта
- при сериализации берём из словарика нужный сериализатор
- при десериализации перебираем все десериализаторы и вызываем метод ПодходитЛиЭтотСериализатор():Boolean, если подходит вызываем метод Десериализовать():ТипОбъекта

Но ни разу такого не потребовалось.
Обычно, при появлении нового типа, проще в 2 свича добавить по варианту - оно же в одном месте, а не по всему коду разбросано.

Цитата:
На данный момент я принял решение объединить представление и данные в классах-наследниках Sprite
Это хорошее решение, если:
- предполагается, что в любой момент времени есть возможность (т.е. вьюшка не ссылается на объект, который нужно убрать со сцены) и не жалко держать всю эту графику в памяти
(проблему можно обойти: вместо класса "графика + данные" сделать класс с двумя полями: "графика" и "данные", и убирать графику из объекта, когда она не нужна)
- не требуется несколько представлений изображений
(не фатальная проблема - здесь можно выделить "главный вид", который будет одновременно моделью, а остальные всякие отображения будут им пользоваться)

Короче, должно прокатить для вашего случая

2 Wolsh
Цитата:
И чем плохо иметь в самих объектах методы, возвращающие их описание?
Ничем, пока в другой формат не придётся переводить.
Но это может и не потребоваться, меня больше другой вопрос беспокоит:
Вот Вы сериализовали данные, повызывав методы у объектов
А десеариализовывать как? Вот есть голые данные, у какого объекта вызывать метод десериализации?

Тут либо свитч (а значит надо лазить в логику главного парсера при добавлении новых элементов)
Либо регистр со списком парсеров (что во многих случаях перебор и архитектурная астронавтика)
Или есть другой способ?


Последний раз редактировалось expl; 09.11.2012 в 16:25.