Ciao a tutti, ecco il mio primo post con il nuovo account ... Purtroppo ho perso quello vecchio.
Allora volevo discutere riguardo il ruolo di WCF in applicazioni distribuite. Mi piacere fare alcune considerazioni riguardo quello che si puo' e non si puo' fare e perche'.
Partirei con il discorso dei dati passati. Ho riscontrato divergenze riguardo il concetto di passare Dto attraverso WCF per nascondere il dominio, ma se andiamo a leggere un paio di definizioni ci accorgiamo che anche Fowler dichiarava che:"When you're working with a remote interface [lo interpreto come WCF ...], such as Remote Facade (388), each call to it is expensive. As a result you need to reduce the number of calls, and that means that you need to transfer more data with each call" ... e qui fa poi riferimento ai Dto.
Secondo: posso dichiarare che il service layer, in alcuni casi, e' il mio servizio WCF? Avere un servizio WCF che funge da interfaccia verso il repository, quindi verso il DAL, e' sbagliato? Perche'? Se la mia necessita' e' quella di NON esporre il dominio al client ma solamente un sub-dominio di DTO, cosa c'e' di sbagliato nell' usare questo approccio?
Se tutto cio' non ha senso allora la mia ultima domanda e': quando e perche' devo usare WCF e quando invece va evitato come la peste?
Per chi non fosse .NET oriented, possiamo tranquillamente interpretare il mio termine WCF con un piu' ampio concetto di SOA.
Poi mi dici dove hai trovato l' avatar dei Kiss ... [:)]
Allora diciamo pure che la soluzione adottata e' sbagliata.
Guardiamo il requisito del cliente: 1) nascondere il dominio nelle applicazioni client2) non fornire accesso diretto al data layer dal client, onde evitare stupide queries del tipo uow.Find<Product>() {Tradotto in SELECT *}
Perche' WCF? Sinceramente non lo so, diciamo pure che faceva figo e che era stupido usare gli .asmx nel 2009, un po' come usare una applet, non ha senso oggi.
L' architettura dovrebbe essere SOA, per il semplice motivo che dovrebbe esistere un 'centro' di business e distribuzione dei dati e diverse applicazioni client che non conoscono nulla se non i dto prelevati da WCF.E" chiaro che prima o poi ti scontri con il client che carica una griglia paginata di dati, e ha bisogno di fare una cosa del tiposvc.GetOrder(....., 10, 1) che dovrebbe avere una firma del tipo GetOrder(string name, int items, int page). Questo e' solo un esempio.
In SOA cosa faresti? Un Dto per ogni metodo che rappresenta i criteri di ricerca disponibili? In modo da avere una cosa del tipo:GetOrder(SearchOrderCriteriaDto criteria); e cosi' via?
Se mi dici di si, mi sparo ... li ...