Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.201.209] |
|
Сообщ.
#1
,
|
|
|
Господа, а есть ли какие-нибудь технологии для автоматической сериализации, передачи и десериализации графа объектов по сети?
Например, чтобы передать объект класса A, и при этом автоматом передался и объект класса B: class A() { B b {get; set} } class B { } Интересует что-нибудь похожее на Hibernate, но только не для ORM, а для этой задачи. То есть описал для каждого класса как его сериализовать в отдельной xml-ке и не паришься. Кстати подразумевается передача "больших" объектов. Например, которые содержат в себе большие массивы интов. |
Сообщ.
#2
,
|
|
|
Чем стандартная сериализация не подходит? Если хочешь автоматизировать процесс создания DTO то посмотри на Automapper.
|
Сообщ.
#3
,
|
|
|
Я с дотнетом пока еще не сильно дружу, поэтому не пинайте сильно если буду тупить.
Цитата juice @ Чем стандартная сериализация не подходит? А не возникнет ни каких проблем, если граф будет очень большим? Или например в случае со списками, или если объект имеет ссылку на себя же? Или еще лучше, когда в серриализуемом объекте есть ссылка на какой-нибудь синглетон... Т.е. в каких вообще случаях могут возникнуть проблемы при использовании стандартной сериализации? |
Сообщ.
#4
,
|
|
|
Цитата Rodya @ А не возникнет ни каких проблем, если граф будет очень большим? Тогда пишут Data Transfer Objects и передают именно их. Начиняют их либо руками либо используя что то вроде Automapper. Цитата Rodya @ Или например в случае со списками, или если объект имеет ссылку на себя же? Зависит от форматтера в подовляющим большинстве случаев проблем нет. Цитата Rodya @ Т.е. в каких вообще случаях могут возникнуть проблемы при использовании стандартной сериализации? Все зависит от того, что понимать под проблеммной, а также зависит от того какой именно форматтер для сериализации будешь использовать. |
Сообщ.
#5
,
|
|
|
Цитата juice @ Начиняют их либо руками либо используя что то вроде Automapper. А в том же Automapper есть возможность задавать что мапить, а что нет? Цитата juice @ Тогда пишут Data Transfer Objects и передают именно их. Просто уточняю. Создают, сериализуют, передают, десериализуют, восстанавливают структуру объектов? Правильно понял? |
Сообщ.
#6
,
|
|
|
Цитата Rodya @ А в том же Automapper есть возможность задавать что мапить, а что нет? есть. Цитата Rodya @ Просто уточняю. Создают, сериализуют, передают, десериализуют, восстанавливают структуру объектов? Правильно понял? Если ты хочешь востановить структуру объектов 1 к 1, на клиенте (по сути иметь тоже представление, что и на сервере) то пользуйся обычной сериализацией, а не DTO, но в большинстве кейсов достаточно именно DTO объектов. |
Сообщ.
#7
,
|
|
|
Цитата Rodya @ А в том же Automapper есть возможность задавать что мапить, а что нет? Вы подготовились к приходу AutoMapper? |
Сообщ.
#8
,
|
|
|
Цитата juice @ в большинстве кейсов достаточно именно DTO объектов. Тогда можно чуть поподробнее описать, когда стоит применять DTO? Просто первый раз столкнулся с этим паттерном, и не совсем понятно зачем он нужен. Или скажите где посмотреть? |
Сообщ.
#9
,
|
|
|
Цитата Rodya @ Тогда можно чуть поподробнее описать, когда стоит применять DTO? Когда тебе важно, передавать по сети как можно меньший объем данных. Сериализация автоматически сериализует полный граф. Такое поведение зачастую нежелательно. Давай представим следующую ситуацию имеем персону, у нее коллекцию акаунтов, каждая персона имеет набор отчетов, каждый отчет имеет кучу других данных, к примеру привязку к периоду и.т.д. Тебе нужно отобразить список аккаунтов в клиентском приложении. Когда ты начнешь сериализовать свои аккаунты ты "по ходу" сериализуешь всю свою базу данных и отправишь ее на клиент. Это будет не быстро и не эффективно. Гораздо лучше написать объект который соберет то, что тебе нужно например поля аакаунта и идентификатор персоны и отправить на клиент только его. С этой проблемой постоянно сталкиваются в NHibernate, когда при сериализации объектов маппер по связям через lazzy тащит все новые и новые данные из БД. |
Сообщ.
#10
,
|
|
|
Теперь ясно.
Спасибо. |