Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Сериализация и иерархия классов


Автор: FatherFrost 23.5.2006, 10:30
Есть Веб-сервис и его клиент. Хочу создать общую иерархию классов. Но возникает проблема с вопросом передачи этих обектов и  работе с ними. Есть 2 варианта:

1.  Класс  на  сервере  и класс на клиенте это наследники абстрактного.  Отличаются у них методы "прогрузки/сохранения" - на сервере  данные читаются из базы, на клиенте - через службу. Если так, то   встает   вопрос  -  можно  ли  в  принципе  сериализовать одного наследника,  а  десериализовать  его в другого наследника. (Реализуемо ли это)

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

а) На клиенте придется таскать с собой код работы с базой (может это и не  критично).

б) Есть риск вызвать "не те" методы на клиенте. Впрочем ими можно пренебречь, этот момент скорее концептуальный.

Хочется услышать мнение гуру по этому вопросу. Может быть оба варианта не пригодны, тогда куда копать? 

Автор: mr.DUDA 23.5.2006, 11:14
По поводу 1 части, нельзя. Точно так же как нельзя преобразовать из ChildA в ChildB:
Код
using System;

class Base
{
}

class ChildA : Base
{
}

class ChildB : Base
{
}

class Test
{
    static void Main(string[] args)
    {
        ChildA objA = new ChildA();
        ChildB objB = (ChildB)objA;
    }
}

Никакой принципиальной разницы между этим кодом и тем, что происходило бы в случае веб-сервиса и клиента, нету.

2 часть решается разными способами. Логичнее всего вынести логику, реализующую низкоуровневую запись и сохранение, в отдельный класс, и переписать твои четыре метода так, чтобы они использовали этот класс. Тогда на сервере можно реализовать реальную загрузку и сохранение, а на клиенте - в виде заглушки, которая ничего не делает. 

Автор: FatherFrost 23.5.2006, 15:11
Спасибо за совет... Но не очень нравится мне ентот путь.... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)