Ho bisogno di qualche critica sul piano di architettura SOA .NET / WCF

1

Sto lavorando a un refactoring di alcuni servizi e apprezzerei qualche critica sul mio approccio generale. Sto lavorando con tre sistemi di dati back-end e ho bisogno di esporre un'API front-end autenticata su http binding, JSON e REST per le app interne e l'integrazione con terze parti. Di seguito ho un'idea approssimativa che è un ibrido tra ciò che ho e dove intendo finire.

Intendo creare estensioni di guida per supportare questa architettura in modo che gli sviluppatori possano crearla rapidamente.

Ecco l'idea corrente per la nostra struttura:

  1. Servizio di routing WCF front-end (distribuito su più server IIS tramite il servizio di bilanciamento del carico hardware)
    • Il bilanciamento del carico dei servizi dietro il routing viene gestito all'interno del servizio di routing, probabilmente round-robin
    • Uno dei servizi sarà un token
    • Associazioni multiple per-service esposte all'indirizzo JSON, REST e qualsiasi altra cosa succeda più tardi
    • All in / out viene gestito tramite DTO POCO
    • Utilizza l'unità per cercare quali servizi sono disponibili ed esporli
  2. I servizi front-end dietro il servizio di routing non fanno altro che esporre l'API e fare la conversione di DTO < - > Entity
    • Unity inietta l'implementazione del servizio per consentire il mocking
    • automapper per conversione DTO / entità
    • Richiama i servizi WF dove la risposta è richiesta immediatamente
    • Accoda a ESB per asincrono WF - ESB invocherà WF in seguito
  3. Livello WF della logica aziendale
    • Esporre le stesse API come servizi front-end
    • Implementa la business logic
    • Avvolge il contesto della transazione dove necessario
    • Chiama i servizi compositi / atomici
  4. Servizi compositi / atomici
    • Esposto come WCF
    • Un servizio per sistema di back-end
    • Operazioni CRUD atomiche standard più operazioni composite
    • Supporta il contesto della transazione

Le domande che ho sono:

  • La separazione delle preoccupazioni sopra descritta è vantaggiosa? Il pensiero attuale è che ogni strato sottostante è un suo progetto, tranne il back-end, in cui ogni sistema ottiene un progetto. Il progetto ha un servizio host e tutti i servizi sono sotto una cartella di servizi. Le interfacce vivono in un progetto separato per ogni livello. DTO ed entità sono in due progetti separati in una cartella condivisa.
  • Attualmente sto pianificando di creare servizi dedicati per funzionalità condivise come la registrazione e l'overload di cose come tracelistener per chiamare quei servizi. È un approccio valido?
  • Altri suggerimenti / commenti?
posta XeroxDucati 25.03.2012 - 00:38
fonte

1 risposta

2

Sembra un po 'complicato, conversione di DTO in Entità (oggetti framework di entità, mi fido) che suona anche come un collo di bottiglia e 4 livelli distinti ...

Voglio dire che hai n servizi direttamente esposti al client tramite un servizio di bilanciamento del carico, ma questi poi chiamano un servizio che esegue la conversione DTO, che quindi chiama un servizio WF (windows workflow?) - quest'ultimo è duplicato su ogni server stai caricando il bilanciamento, o è un singolo servizio che viene chiamato? Questo quindi chiama i servizi wrapper back-end.

Ora, è bene che tu abbia i wrapper back-end per incapsulare i 3 servizi dati, e che tu abbia l'API client JSON / REST. Penso che il problema sia nel mezzo - perché non combinare questi 2 strati insieme, ignorare la conversione EF e attenersi alla manipolazione diretta dei DTO. Sarà più veloce (soprattutto perché probabilmente dovrai riconvertire nuovamente in DTO per inviare comunque ai 3 servizi dati) e più facile da capire. Certo, non usi la "tecnologia EF cool", ma la tecnologia per il gusto della tecnologia è mai una buona idea.

Personalmente, proverei anche a unire i wrapper WCF con il livello intermedio, a meno che non sia assolutamente necessario che tutti i 3 servizi si assomiglino, si potrebbe anche chiamarli usando i loro sistemi nativi, magari usando un local, libreria in-process per includerli.

Ricorda, in ultima analisi, il fatto di mantenerlo semplice pagherà dividendi in futuro. Il tuo sistema attuale sarà difficile da refactoring con i nuovi sistemi di back-end in quanto una piccola quantità di sviluppatori dovrà toccare molti livelli e tecnologie differenti.

    
risposta data 26.03.2012 - 00:07
fonte

Leggi altre domande sui tag