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! :)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Finalmente disponibili i driver delle schede UMTS Vodafone per Windows Vista, il 12 marzo 2007 alle 09:50
- Installazione di Windows Vista, il 21 novembre 2006 alle 01:46
- WWF e WCF January 2006 CTP, il 21 gennaio 2006 alle 19:00
- Avalon e il data binding, il 19 gennaio 2005 alle 23:48
- XAML, di che si tratta?, l'8 gennaio 2005 alle 17:45