Выставление существующих бизнес-объектов в WCF - PullRequest
2 голосов
/ 03 июня 2009

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

У меня есть библиотека классов, в которой есть пространства имен для типов, бизнес-логики и доступа к данным. Классы в пространствах имен логики и доступа к данным являются статическими и имеют базовые методы crud для заполнения экземпляров типов данными или получения экземпляров типов, которые уже заполнены и выполняют вставки или обновления в базе данных.

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

Каждый турникет WCF, который я вижу, создает доменные объекты в сервисном проекте, но я не хочу, чтобы мои объекты определялись в двух местах.

Поэтому я подумал, что могу сослаться на сериализацию в моей существующей библиотеке классов и пометить классы типов как [DataContract], а свойства - как [DataMember]. Затем в проекте WCF создайте интерфейсы [ServiceContract] с методами [OperationContract], чтобы сопоставить классы и методы статической логики из существующей библиотеки, которую я хочу предоставить. Затем из проекта WCF создайте ссылку на существующую библиотеку классов и реализуйте интерфейсы WCF, добавив в нее методы, которые вызывают существующие логические методы библиотеки, которые возвращают существующие типы библиотек.

Это хороший шаблон?

Ответы [ 2 ]

5 голосов
/ 03 июня 2009

Звучит хорошо, но модернизация сериализации, как правило, доставляет больше хлопот, чем кажется на первый взгляд. Я бы посоветовал вам встроить несколько упрощенных контрактов данных в уровень обслуживания, а затем создать небольшой уровень, который расположен между вашим уровнем обслуживания и бизнес-уровнем для преобразования контрактов данных в бизнес-объекты и наоборот.

1 голос
/ 03 июня 2009

Предполагая, что ваш бизнес-объект может быть сериализован (иметь атрибут Serializable), одним из подходов может быть создание объекта DataContainer, который будет вашим контрактом на данные. Этот объект будет использоваться в ваших методах CRUD.

Например, ваш интерфейс может быть Обновление (DataContainer obj) Вставить (DataContainer obj)

и т.д.

Тогда вы будете использовать двоичную сериализацию, чтобы упаковать ваш объект в массив байтов и передать его таким образом через WCF. С другой стороны, вы бы десериализовали их снова используя BinarySerialization. Вам просто нужно убедиться, что обе стороны (клиент и сервер) имеют правильную версию сборки с типами ваших бизнес-объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...