BlogServiceHost.Create()

WCF & Azure - Il blog di Fabio Cozzolino

Recent Posts

Tags

My

Twitter

Community

Archives

Email Notifications

Social Bar Widget

Contract-First vs Code-First

La discussione percorre la rete ormai da diverso tempo, ma vorrei capire effettivamente qual'è l'orientamento di noi italiani. Abbiamo:
  • Code-First
    • Sviluppo rapido
    • Definizione del contratto poco preciso
  • Contract-First
    • Sviluppo meno rapido
    • Definizione del contratto moolto più precisa
Nel primo caso è il codice da noi scritto che genera il contratto (il wsdl), mentre nel secondo caso il codice o, meglio, l'interfaccia che rappresenta il contratto nel nostro linguaggio di sviluppo, viene generata partendo dal WSDL. Con il Code-First lo sviluppatore, in alcuni casi, può non essere cosciente di cosa accade ad ogni modifica del servizio da lui scritto. Inconsciamente può mettere un dataset, per dirne uno, come parametro di un servizio. Non che questo non deve essere fatto, ma se dobbiamo essere interoperabili e soprattutto guardare al futuro (chi vieta a microsoft di modificare il dataset?) è un qualcosa assolutamente da evitare.
Nel Contract-First, invece, il contratto viene stabilito e "disegnato" a priori. E' poi compito dello sviluppatore rispettarlo ed implementarlo nel linguaggio che più gli è consono. Questo costringe lo sviluppatore a rispettare senza mezzi termini quanto stabilito dal contratto.

Questa è la mia visione e sono contento di condividerla, e magari essere contraddetto, con voi. Senza dubbio uno sviluppatore attento alle sfumature è capace di assottigliare la differenza delle due metodologie. Voglio sottolineare che ognuna ha vantaggi e svantaggi ed è un bene scegliere la più opportuna.

Un'ultima nota: Contract-First non vuol dire realizzare l'interfaccia e mettergli l'attributo ServiceContract, ma significa avere un WSDL (il contratto nei web services) per poi realizzare l'interfaccia che il nostro servizio deve implementare.

La discussione, se volete, è aperta. Big Smile [:D]

Comments

paolo said:

Contract-first, senz'ombra di dubbio!
Quando le scadenze, l'incertezza dei requisiti, e più in generale l'esercito nemico che raccoglie clienti, commerciali e manager lo permette, of course ;)
Se ci pensate, il modus operandi Contract-first è il primo passo verso lo sviluppo per componenti, la riusabilità e tutte quelle belle cose che più in generale si riassumono nella QUALITA'.
Il che, al solito, apre un discorso più ampio.
L'ingegneria del software (Pressman docet) è concorde nell'affermare che ci vogliono ***tre anni*** di sforzo produttivo perchè l'impegno profuso nel CBSE (Component-Based Software Engineering) cominci a ripagarsi.
Quante delle nostrane software house sono sicure di rimanere sul mercato per tanto tempo?
Domanda che ne genera automaticamente un'altra: le Aziende che stanno sul mercato da ben più di tre anni, e che sono ragionevolmente sicure di rimanerci sempre ben più di tre anni, perchè non adottano il CBSE e più in generale le buone prassi dell'ingegneria del software?
# May 9, 2006 8:39 AM

Tiziana said:

Concordo, Contract-first !
In Visual Studio la metodologia adottata per la creazione di XML Web Services è di tipo "code first" e soffre di problemi di interoperabilità questo è noto;
Anche Microsoft viene incontro al concetto di Contract-First e lo definisce "WSDL First approach" o "Schema First approach".
In un interessante articolo mette in risalto l'implementazione di "Web Services Interoperability" con un esempio tra Microsoft .NET and IBM WebSphere.
Da apprezzare il gesto :-)

http://msdn.microsoft.com/vstudio/java/interop/websphereinterop/default.aspx
# May 9, 2006 10:45 AM

Fabio.Cozzolino said:

Hai ragione, Paolo. Purtroppo spesso sono i tempi stretti che  impediscono di lavorare in maniera veramente produttiva, lasciando maggiore spazio alla risoluzione di un problema immediato invece di costruire le basi per la soluzione di più problemi futuri.
Perchè le aziende non adottano il CBSE? Probabilmente non ne vedono (ancora) il vantaggio ... Stick out tongue [:P]

Purtroppo, come dice Tiziana, il Contract-First è ancora poco supportato dai tool di sviluppo come Visual Studio. I tool come svcutil.exe o wsdl.exe (la nuova versione disponibile con il WinSDK) forniscono un buon supporto, ma non ancora sufficiente e, forse, non ancora al livello del WSCF (http://www.thinktecture.com/Resources/Software/WSContractFirst/default.html), al quale manca, però, il supporto per Windows Communication Foundation.
# May 9, 2006 10:36 PM

Weblog di Fabio Cozzolino said:

Ho già parlato in un precedente post di come è possibile intervenire per modificare "al volo" il WSDL

# February 28, 2007 11:49 PM