ServiceContract e interfaccia di classe in Indigo

di Riccardo Golia

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
nostromo scrive:
ServiceContract e interfaccia di classe in Indigo

veramente ineteressante, mentre leggevo non capivo, poi ho acchiappato il concetto e devo dire che mi piace, le novità in arrivo sono molte, e quasi tutte belle

ciao marco
23/03/2005 ore 11.39 | 2 risposte
Daniele Bochicchio scrive:
Re: ServiceContract e interfaccia di classe in Indigo

nostromo wrote:
quasi tutte belle

quasi tutte?
cosa non ti piace?
23/03/2005 ore 11.54 | 1 risposta
nostromo scrive:
Re: ServiceContract e interfaccia di classe in Indigo

non mi piace il fatto che già dormo poco per conoscere al meglio .net 1.1 per il 2.0 dovro rinunciare pure a giocare mannaccia :) per stare al passo con avalon indigo,
bhe mi rimane solo una cosa a cui rinunciare...esclundendo il piacere della tavola :)....meglio soprassedere :)



ciao marco

Modificato da nostromo il 23 marzo 2005 14.02 -
23/03/2005 ore 14.01

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

Nella stessa categoria
I più letti del mese
TagCloud
BLOG INFO
  • 166 post, 106 commenti, 63 trackback
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom
IN EVIDENZA