La nostra azienda sta avviando un'iniziativa SOA piuttosto ampia. Stiamo facendo un sacco di cose giuste: c'è una buona comunicazione; denaro per strumenti ove appropriato; e abbiamo portato alcune buone competenze per aiutarci con la transizione.
Stiamo cercando di sviluppare standard che possiamo seguire come gruppo e uno degli standard proposti mi dà un po 'fastidio:
Abbiamo standardizzato il modello in cui ogni operazione accetta un oggetto richiesta e restituisce un oggetto risposta.
Mi rendo conto che questo è più o meno un approccio standard per molte persone, ma mi chiedo perché dovrei preoccuparmi? (Non sono così bravo con la saggezza ricevuta, ho bisogno del perché).
La maggior parte dei servizi che fornirò sono semplici recupero di metadati organizzativi. Ad esempio, trova la politica di sicurezza per un determinato utente. Ciò richiede un ID utente e nient'altro. Lo standard mi dice che dovrei racchiudere questa richiesta in un oggetto e avvolgere la politica restituita in un oggetto risposta.
Il mio disagio è amplificato da uno sguardo al WSDL generato dai nostri contratti. WCF genera automaticamente messaggi di richiesta e risposta e racchiude anche l'oggetto richiesta / risposta.
Comprendo perfettamente che se si effettua una richiesta complessa, è garantito un oggetto di input complesso. Questo è ciò che faresti anche se i servizi non fossero coinvolti.
La mia domanda è: perché dovrei avvolgere automaticamente le richieste e le risposte quando:
- Rende i servizi semplici meno espressivi
- Lo faresti comunque per un servizio complesso
- WCF crea comunque un messaggio di richiesta / risposta
Ho trovato i seguenti argomenti a favore di questo approccio:
Supporta il controllo delle versioni consentendo di inserire parametri opzionali nell'oggetto richiesta.
In passato, ho fatto un bel po 'di COM e lo considererei quasi un anti-pattern per il versioning. Per alcune cose, suppongo che sarebbe d'aiuto, ma mi aspetto che dove sarebbe d'aiuto, hai già un oggetto parametro comunque.
Consente a dati e comportamenti comuni di essere isolati in una classe base
Questo ha un certo peso con me.
Allontana le persone da un comportamento in stile RPC e verso un comportamento di messaggistica
L'ho letto sul sito di Microsoft e l'ho sentito dal nostro guru, ma non ho ancora un'idea chiara di cosa significhino o perché sia prezioso. Le interfacce dall'aspetto naturale fanno sì che le persone tendano a dimenticare di chiamare un servizio remoto?
Sto cercando di riformattare le firme di forse 300 metodi, quindi questa è una quantità non banale di dolore. Sono un grande fan della coerenza delle implementazioni, quindi sono disposto ad assumermi il dolore, aiuterà solo a sapere che alla fine ne varrà la pena.