На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Передача графа объектов по сети , готовые технологии
    Господа, а есть ли какие-нибудь технологии для автоматической сериализации, передачи и десериализации графа объектов по сети?

    Например, чтобы передать объект класса A, и при этом автоматом передался и объект класса B:
    ExpandedWrap disabled
      class A()
      {
         B b {get; set}
      }
       
      class B
      {
      }


    Интересует что-нибудь похожее на Hibernate, но только не для ORM, а для этой задачи. То есть описал для каждого класса как его сериализовать в отдельной xml-ке и не паришься.
    Кстати подразумевается передача "больших" объектов. Например, которые содержат в себе большие массивы интов.
      Чем стандартная сериализация не подходит? Если хочешь автоматизировать процесс создания DTO то посмотри на Automapper.
        Я с дотнетом пока еще не сильно дружу, поэтому не пинайте сильно если буду тупить.

        Цитата juice @
        Чем стандартная сериализация не подходит?

        А не возникнет ни каких проблем, если граф будет очень большим? Или например в случае со списками, или если объект имеет ссылку на себя же? Или еще лучше, когда в серриализуемом объекте есть ссылка на какой-нибудь синглетон...
        Т.е. в каких вообще случаях могут возникнуть проблемы при использовании стандартной сериализации?
        Сообщение отредактировано: Rodya -
          Цитата Rodya @
          А не возникнет ни каких проблем, если граф будет очень большим?

          Тогда пишут Data Transfer Objects и передают именно их. Начиняют их либо руками либо используя что то вроде Automapper.

          Цитата Rodya @
          Или например в случае со списками, или если объект имеет ссылку на себя же?

          Зависит от форматтера в подовляющим большинстве случаев проблем нет.

          Цитата Rodya @
          Т.е. в каких вообще случаях могут возникнуть проблемы при использовании стандартной сериализации?

          Все зависит от того, что понимать под проблеммной, а также зависит от того какой именно форматтер для сериализации будешь использовать.
            Цитата juice @
            Начиняют их либо руками либо используя что то вроде Automapper.

            А в том же Automapper есть возможность задавать что мапить, а что нет?

            Цитата juice @
            Тогда пишут Data Transfer Objects и передают именно их.

            Просто уточняю. Создают, сериализуют, передают, десериализуют, восстанавливают структуру объектов? Правильно понял?
              Цитата Rodya @
              А в том же Automapper есть возможность задавать что мапить, а что нет?

              есть.

              Цитата Rodya @
              Просто уточняю. Создают, сериализуют, передают, десериализуют, восстанавливают структуру объектов? Правильно понял?

              Если ты хочешь востановить структуру объектов 1 к 1, на клиенте (по сути иметь тоже представление, что и на сервере) то пользуйся обычной сериализацией, а не DTO, но в большинстве кейсов достаточно именно DTO объектов.
                Цитата Rodya @
                А в том же Automapper есть возможность задавать что мапить, а что нет?


                Вы подготовились к приходу AutoMapper? ;)
                  Цитата juice @
                  в большинстве кейсов достаточно именно DTO объектов.

                  Тогда можно чуть поподробнее описать, когда стоит применять DTO? Просто первый раз столкнулся с этим паттерном, и не совсем понятно зачем он нужен. Или скажите где посмотреть?
                    Цитата Rodya @
                    Тогда можно чуть поподробнее описать, когда стоит применять DTO?

                    Когда тебе важно, передавать по сети как можно меньший объем данных. Сериализация автоматически сериализует полный граф. Такое поведение зачастую нежелательно. Давай представим следующую ситуацию имеем персону, у нее коллекцию акаунтов, каждая персона имеет набор отчетов, каждый отчет имеет кучу других данных, к примеру привязку к периоду и.т.д. Тебе нужно отобразить список аккаунтов в клиентском приложении. Когда ты начнешь сериализовать свои аккаунты ты "по ходу" сериализуешь всю свою базу данных и отправишь ее на клиент. Это будет не быстро и не эффективно. Гораздо лучше написать объект который соберет то, что тебе нужно например поля аакаунта и идентификатор персоны и отправить на клиент только его. С этой проблемой постоянно сталкиваются в NHibernate, когда при сериализации объектов маппер по связям через lazzy тащит все новые и новые данные из БД.
                      Теперь ясно.
                      Спасибо.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0266 ]   [ 15 queries used ]   [ Generated: 17.05.24, 08:04 GMT ]