La nostra azienda sta avviando un'iniziativa SOA piuttosto ampia. Stiamo facendo molte cose bene: c'è una buona comunicazione; denaro per gli strumenti, se del caso; e abbiamo apportato alcune buone competenze per aiutarci nella transizione.
Stiamo cercando di sviluppare standard che possiamo seguire come gruppo e uno degli standard proposti mi dà fastidio un po ':
Abbiamo standardizzato sul modello in cui ogni operazione richiede un oggetto richiesta e restituisce un oggetto risposta.
Mi rendo conto che questo è più o meno un approccio standard per molte persone, ma sto chiedendo perché dovrei preoccuparmi? (non sono così bravo con la saggezza ricevuta, ho bisogno di perché).
La maggior parte dei servizi che fornirò sono semplici recuperi di metadati organizzativi. Ad esempio, trova la politica di sicurezza per un particolare utente. Questo ha bisogno di 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 i messaggi di richiesta e risposta e avvolge anche l'oggetto richiesta / risposta.
Capisco perfettamente che se stai facendo una richiesta complessa, allora è necessario un oggetto di input complesso. Questo è quello che faresti anche se i servizi non fossero coinvolti.
La mia domanda è: perché dovrei racchiudere automaticamente richieste e 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 l'inserimento di parametri facoltativi nell'oggetto richiesta.
Nel passato, ho fatto un bel po 'di COM, e considererei questo quasi un anti-pattern per il controllo delle versioni. Per alcune cose, suppongo che sarebbe d'aiuto, ma mi aspetto che dove sarebbe utile, hai già un oggetto parametro comunque.
Consente di isolare dati e comportamenti comuni in una classe base
Questo ha un peso con me.
Guida le persone lontano da un comportamento in stile RPC e verso un comportamento di messaggistica
Ho letto questo sul sito di Microsoft e l'ho ascoltato dal nostro guru, ma non ho ancora una chiara idea di cosa significano o perché è prezioso. È che le interfacce dall'aspetto naturale fanno sì che le persone tendano a dimenticare di chiamare un servizio remoto?
Sto cercando di refactoring le firme di forse 300 metodi, quindi questa è una quantità non banale di dolore. Sono un grande fan della coerenza nelle implementazioni, quindi sono disposto ad accettare il dolore, mi aiuterà solo a sapere che alla fine ne varrà la pena.