Парадигма программирования WCF
От: asamoylov  
Дата: 01.08.10 13:21
Оценка:
На работе мне приходится работать с WCF, и глядя на то что пишут коллеги, и заинтересовался вот таким вопросом:

Намеренно ли в WCF разделены данные и методы? Как правило, атрибуты [DataContract]/[DataMember] накладываются на одни классы, а [ServiceContract]/[OperationContract] — на другие. В результате все пишут некие обработчики или хелпер-классы, которые экспозят методы, оперирующие над классами данных.

Нет ли практики писать "активные" классы, которые совмещали бы в себе и то и другое?

То есть вместо:

var client = ClientFactory<T>.CreateClient("net.tcp://localhost:8052/MyService");  // create service contract object

var data = new SomeDataContract(); // create data contract object

client.DoSomething(data); // execute operation contract on data contract


писать примерно следующее:

var activeObject = new SomeOperationAndDataContract("net.tcp://localhost:8052/MyService"); // create an object which is data and service contract

activeObject.DoSomething(); // execute operation contract
Re: Парадигма программирования WCF
От: HowardLovekraft  
Дата: 02.08.10 08:04
Оценка:
Здравствуйте, asamoylov, Вы писали:

A>В результате все пишут некие обработчики или хелпер-классы, которые экспозят методы, оперирующие над классами данных.

Приведите пример "обработчика" или "хэлпера". Не понятно, о чем речь в данном контексте.
Re[2]: Парадигма программирования WCF
От: Аноним  
Дата: 02.08.10 14:53
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, asamoylov, Вы писали:


A>>В результате все пишут некие обработчики или хелпер-классы, которые экспозят методы, оперирующие над классами данных.

HL>Приведите пример "обработчика" или "хэлпера". Не понятно, о чем речь в данном контексте.

Ну в общем-то имеется ввиду сам класс службы, тот, который помечается атрибутами [ServiceContract]/[OperationContract]
Re[3]: Парадигма программирования WCF
От: HowardLovekraft  
Дата: 03.08.10 08:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ну в общем-то имеется ввиду сам класс службы, тот, который помечается атрибутами [ServiceContract]/[OperationContract]

Так он не вспомогательный. Он — основной.
Вообще да, так сделано преднамеренно, в соответсвии c SOA.

З.Ы. В общем случае использование сервиса не всегда означает использование какого-либо контракта данных:
public interface ILightBulbService()
{
  // turns light bulbs on or off
  void SetLightBulbState(Boolean[] state);

  // requests current state
  Boolean[] GetLightBulbState();
}

Сервис есть, контракт сервиса — есть, специально описанного контракта данных нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.