Nelle scorse settimane ho discusso sull'opportunità o meno di far passare tutte le chiamate al SOS (Service Oriented Server ;-)) attraverso un unico servizio (per intenderci un asmx) che invia il messaggio al servizio corretto in base al contenuto.
Venendo da un modo di applicazioni n-tier, questo paradigma non mi è molto congeniale.
Una delle principali problematiche che vedo sono legate alla facilità con cui uno sviluppatore riesce a 'trovare' i servizi che gli servono per implementare una determinata funzionalità (tale concetto lo riassumo come discoverability, che mi sembra rendere bene l'idea, ma non è forse neanche inglese!).
Averli in un asmx raggruppati per tipologie coerenti facilita molto in contrasto con doverli andare a ricercare in una qualche sorta di metabase.
Chiaramente la strada maestra sarebbe quella di avere un coordinatore (analista?) che scriva della documentazione e degli sviluppatori che la leggano....nessuno è perfetto!
L'altra è legata agli strumenti che uno sviluppatore deve avere per creare i contratti. Creare un asmx è banale, creare un sistema per censire i 'contratti' in un metabase è già più difficile.
Ho trovato un articolo di Rocky Lhotka http://www.theserverside.net/articles/showarticle.tss?id=SOAVersioningCovenant" (Barbieri Lorenzo vedi che anch'io mi stò impegnando sulle regole dell'usabilità specialmente sulla 4 ;-) )
che parla di questi argomenti, che mi ha chiarito un po' le motivazioni di ragionare per covenant (patti) in contrapposizione ai servizi.
Riassumendo e semplificando (da un punto di vista non troppo SOA) dice che anche per i servizi dovrebbero esserci dei meccanismi simili agli overload dei metodi. Questo per semplificare l'estensibilità dei metodi.
In effetti se cerchiamo di esporre un metodo con degli overload in un asmx viene ritornato un errore quando andiamo a recuperare il wsdl del servizio.
Parlando del servizio unico, lui lo sconsiglia proprio per i discorsi di 'discoverability'.
Lhotka dice anche di aver richiesto al team di Indigo il supporto nell'IDE di tali feature....devo ancora riuscire a installare WCF per capire come si relazionano i data contract con questi discorsi.