ServiceContract e interfaccia di classe in Indigo

di Riccardo Golia, in Windows Vista,

Quello che segue è l'esempio di codice proposto da David Chappell nella presentazione delle caratteristiche di Indigo durante la giornata di ieri all'Architect Day 2005.

using System.ServiceModel;

[ServiceContract]
class Calculator
{
[OperationContract]
private int Add(int a, int b)
{
return a + b; 
}

[OperationContract]
public int Subtract(int a, int b)
{
return a - b;
}

public int Multiply(int a, int b)
{
return a * b;
}
}

Di fatto quello che si nota nel codice proposto è l'associazione dell'attributo OperationContract ad un metodo privato della classe che funge da servizio. Questa cosa testimonia il disaccoppiamento tra ServiceContract e interfaccia di classe, che riprende la necessità di diversificare il concetto di servizio da quello di oggetto.

In altre parole una classe che funge da servizio viene marcata con l'attributo ServiceContract ed i metodi esposti dal servizio vengono marcati con l'attributo ContractOperation indipendentemente che siano private o public. Questo perchè il comportamento del servizio non deve essere necessariamente uguale a quello dell'oggetto. Servizio e oggetto sono due astrazioni diverse e vanno trattate come tali, ovvero ognuna è caratterizzata da un contratto indipendente dall'altro. Proprio per questo motivo David parlava addirittura del fatto che probabilmente tutti i metodi esposti da un servizio dovrebbero essere private!!!

Un oggetto infatti espone un contratto che descrive il suo comportamento nell'ambito del contesto applicativo in cui l'oggetto stesso è attivo, ovvero i metodi che possono essere chiamati nell'ambito dell'applicazione da altri oggetti. In questo caso si definisce come public ciò che può essere richiamato e come private ciò che deve essere mascherato.

Parallelamente un servizio espone a sua volta un contratto descritto nel WSDL che è rappresentato dall'insieme dei metodi accessibili. Questo contratto non necessariamente deve essere coincidente con il contratto relativo all'oggetto. Ecco allora che si usano gli attributi per dire quali metodi devono essere esposti dal servizio.

Se sulle prime sono rimasto un attimo disorientato, una volta capiti i concetti e le differenze tra i due ambiti e le due astrazioni, ho colto l'importanza di questa cosa.

A questo punto direi che è cosa buona e giusta! :)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese