Abbiamo un po 'di disaccordo nel nostro team e mi piacerebbe sentire le opinioni di altre persone. Abbiamo una soluzione matura che utilizza un modello di Entity Framework, a cui si accede da un livello di repository, a cui si accede a sua volta da un livello di business logic. Le classi BLL implementano interfacce, che sono anche implementate dai servizi in un progetto WCF. I servizi WCF sono wrapper molto sottili intorno alle classi BLL e ogni chiamata di servizio è fondamentalmente un one-liner che passa la chiamata attraverso la BLL. Abbiamo un progetto WPF che utilizza i servizi WCF per l'accesso ai dati.
Abbiamo recentemente aggiunto un progetto ASP.NET MVC4 alla soluzione, per fornire l'accesso Web ad alcune delle funzionalità del progetto WPF. Poiché il server Web si trova sulla stessa rete locale del database SQL Server e della cartella Web WCF, ho aggiunto un riferimento al progetto BLL dal progetto MVC e ho effettuato l'accesso ai dati direttamente tra i controller MVC e le classi BLL.
Il nostro superiore tecnico si è opposto a questo e ha detto che stavo rompendo SOA. Vuole che aggiunga i riferimenti ai servizi WCF al progetto MVC e acceda ai dati tramite WCF.
Il mio argomento contro questo è che passare attraverso WCF non aggiunge nulla di beneficio al progetto MVC, ma danneggia le prestazioni (lo so per certo, come ho provato). Dato che i servizi WCF passano le chiamate direttamente nelle classi BLL, che implementano le stesse interfacce, non vedo come sia più SOA utilizzare WCF che chiamare direttamente i metodi BLL. Inoltre, le prestazioni sono fondamentali in questo progetto MVC e non voglio fare nulla che possa influire sulle prestazioni a meno che non ci sia un buon motivo per farlo. Non riesco a vedere nessuna buona ragione qui. Anche se ottimizziamo il progetto WCF, sarà sempre più lento dell'accesso diretto ai BLL.
Secondo le definizioni di SOA che ho visto (per esempio, vedi la sezione Definizioni nell'articolo SOA di Wikipedia link ), i nostri BLL sono decisamente all'interno dello schema. Non vedo alcun requisito per utilizzare i servizi Web per chiamarlo SOA. Certo, i servizi web sono una forma di SOA, ma non sono l'unica forma. Per quanto posso vedere, un approccio a strati, che è in definitiva la nostra, è completamente conforme al principio di SOA. Ora mi rendo conto che forse non ho esposto la sua argomentazione in modo molto strong, ma questo principalmente perché non riesco a capirlo. Spero che alcune persone che sono più competenti di me possano venire e offrire alcuni commenti in un modo o nell'altro. Ci incontreremo per discutere di questo domani, e sono sicuro che mi spingerà molto strong a usare WCF invece di riferire direttamente le BLL. Se ha ragione, allora è giusto, dovremo subire il colpo di performance. Tuttavia, se in questo caso non vi è alcun vantaggio nell'uso di WCF, allora devo essere in grado di spiegare perché il modo in cui l'ho fatto finora è completamente SOA.
Apprezzerei qualsiasi commento.