Client-server intranet

rated by 0 users
This post has 8 Replies | 2 Followers

Top 25 Partecipanti
Maschio
Post 10
Punteggio 170
MarioDuz Posted: 11-17-2009 17.02

Dopo anni di forzata attenzione quasi esclusiva verso il mondo web, mi ritrovo (finalmente) a dover gestire e pianificare una GUI WinForm o WPF, ancora non si sa, connessa al back-end nella stessa intranet e con autenticazione Windows.

L'applicazione avrà comunque anche una view web ed utilizzo un MVP, seppur non rigorosamente "puro".

Il grosso problema è che, rispetto a qualche anno fa, parecchie cose sono cambiate nel mio approccio: non utilizzavo un presentation layer, non esisteva WCF (o era appena uscito?), non gestivo il contesto di persistenza, ecc. e quindi mi ritrovo a riaffrontare da zero il problema, ovviamente facendo in modo che non "cozzi" con l'architettura attuale e che non sia "inutilmente complesso".

Accantonato, per ora, Remoting (senza un vero motivo, solo perchè WCF è più recente) mi sono basato sul suo "erede" WCF utilizzando netTcpBinding e clientCredentialType="Windows" per la sicurezza basata sul messaggio. Mi sono inoltre informato sull'utilizzo dei callbacks per ottenere la dependency injection.

Non sono riuscito però ad ottenere il "trasporto degli oggetti" (!= SOA, chiaro), nel senso che posso utilizzare la sessione client/server, ma non sono riuscito a trasportare "di là" un oggetto e riportarlo "di quà" in modo che originalInstance == returnedInstance, tanto per capirci. ;-)

Ergo, prima domanda di carattere generale: esiste una configurazione di WPF che permetta il trasporto di oggetti utilizzando Windows authentication?

Passiamo oltre... (Adesso faccio collassare qualcuno! :-p)

Qualche anno fa, prima di essere "risucchiato" da ASP.NET, avevo postato qui in merito all'idea di lasciare solo la view lato client e di conseguenza il presentation lato server. Praticamente tutti quelli che hanno risposto non erano favorevoli, ma parlandone poi off-line l'idea non è sembrata poi così improponibile e quindi mi trovo a riprendere il "brainstorming" dove l'avevo interrotto.

All'apertura della view, quindi, questa potrebbe collegarsi al servizio del suo presenter iniettando la propria istanza come oggetto di callback, sfruttando eventualmente anche gli eventi.

Utilizzando però un MVP non "puro" le mie view attuali conoscono e sanno manipolare le entità del Domain Model (per esempio, in fase di creazione di una nuova entità, la view riceve la relativa nuova istanza vuota dal presenter e la idrata con i dati presenti nei controlli) e quindi in questo caso:

  • o riesco a "trasportare" l'istanza dal presenter server-side alla view client-side e ritorno;
  • o devo creare un proxy che si occupi di mascherare questo tipo di operazioni utilizzando dei DTO o qualche altra soluzione "disconnessa".

Inutile dire che la seconda possibilità introduce codice e complessità da gestire e manutenere, quindi sto cercando di capire se esista una terza soluzione al problema.

Che ne dite? Ho solo bisogno di una vacanza? :-)

Grazie, ciao!

Top 10 Partecipanti
Post 143
Punteggio 2.560
Ciao Mario,

You wrote on 17/11/2009 :
> L'applicazione avrà comunque anche una view web ed utilizzo un MVP, seppur
> non rigorosamente "puro".

Tutta la vita MVC, non necessariamente Asp.net mvc piuttosto MVC come
pattern perch� MVP su un'applicazione web � proprio ostico.

> Accantonato, per ora, Remoting (senza un vero motivo, solo perchè WCF è
> più recente) mi sono basato sul suo "erede" WCF utilizzando netTcpBinding e
> clientCredentialType="Windows" per la sicurezza basata sul messaggio. Mi sono
> inoltre informato sull'utilizzo dei callbacks per ottenere la dependency
> injection.
>
> Non sono riuscito però ad ottenere il "trasporto degli oggetti" (!= SOA,
> chiaro), nel senso che posso utilizzare la sessione client/server, ma non
> sono riuscito a trasportare "di là" un oggetto e riportarlo "di quà" in
> modo che originalInstance == returnedInstance, tanto per capirci. ;-)

non se po' fa, Wcf != Remoting, Wcf = servizio ergo i tuoi oggetti
vengono serializzati e deserializzati nel passaggio.

> Ergo, prima domanda di carattere generale: esiste una configurazione di WPF
> che permetta il trasporto di oggetti utilizzando Windows authentication?

credo tu intenda Wcf, ma non capisco lo stesso la domanda.

> Passiamo oltre... (Adesso faccio collassare qualcuno! :-p)
>
> Qualche anno fa, prima di essere "risucchiato" da ASP.NET, avevo postato qui
> in merito all'idea di lasciare solo la view lato client e di conseguenza il
> presentation lato server. Praticamente tutti quelli che hanno risposto non
> erano favorevoli, ma parlandone poi off-line l'idea non è sembrata poi così
> improponibile e quindi mi trovo a riprendere il "brainstorming" dove l'avevo
> interrotto.
>
> All'apertura della view, quindi, questa potrebbe collegarsi al servizio del
> suo presenter iniettando la propria istanza come oggetto di callback,
> sfruttando eventualmente anche gli eventi.
>
> Utilizzando però un MVP non "puro" le mie view attuali conoscono e sanno
> manipolare le entità del Domain Model (per esempio, in fase di creazione di
> una nuova entità, la view riceve la relativa nuova istanza vuota dal
> presenter e la idrata con i dati presenti nei controlli) e quindi in questo
> caso:
>
> o riesco a "trasportare" l'istanza dal presenter server-side alla view
> client-side e ritorno; o devo creare un proxy che si occupi di mascherare
> questo tipo di operazioni utilizzando dei DTO o qualche altra soluzione
> "disconnessa".
>
> Inutile dire che la seconda possibilità introduce codice e complessità da
> gestire e manutenere, quindi sto cercando di capire se esista una terza
> soluzione al problema.
>
> Che ne dite? Ho solo bisogno di una vacanza? :-)

non � che abbia capito molto :-), ma se il target � Wpf molla MVP e
buttati su M-V-VM e vedrai che il tuo approccio cambier� radicalmente
(in meglio).

> Grazie, ciao!

..m

--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCP
http://mvp.support.microsoft.com
http://blogs.ugidotnet.org/topics
whynot [ at ] topics [ dot ] it
  • | Punteggio Post: 20
Top 25 Partecipanti
Maschio
Post 10
Punteggio 170

Ciao Mauro,

Tutta la vita MVC, non necessariamente Asp.net mvc piuttosto MVC come pattern perch� MVP su un'applicazione web � proprio ostico.

Orpolo... io con l'MVP in salsa "Duz" di cui avevo postato un primo brainstorming sul blog mi sono trovato benissimo ed anche chi ha dovuto sorbirselo :-) non ha disdegnato (almeno che io sappia! :-D).

 > in modo che originalInstance == returnedInstance, tanto per capirci. ;-)

non se po' fa

Grazie :-(

> Ergo, prima domanda di carattere generale: esiste una configurazione di WPF
> che permetta il trasporto di oggetti utilizzando Windows authentication?

credo tu intenda Wcf, ma non capisco lo stesso la domanda.

Yep... lapsus! Cmq era la domanda a cui hai risposto prima! ;-)

non � che abbia capito molto :-), ma se il target � Wpf molla MVP e
buttati su M-V-VM e vedrai che il tuo approccio cambier� radicalmente
(in meglio).

Mi dispiace non essere riuscito a spiegarmi... Grazie cmq per esserti letto il mappazzo! ;-)
Cmq avendo anche una view web preferisco evitare in questo caso MVVM (a meno di non prevedere un presentation specifico per ogni view, che personalmente escludo a priori).

Proverò a prototipare con i proxy per vedere "quanto fa male"!

Ciao!

Mario

  • | Punteggio Post: 20
Top 10 Partecipanti
Post 143
Punteggio 2.560
Ciao MarioDuz,

You wrote on 18/11/2009 :
> Cmq avendo anche una view web preferisco evitare in questo caso MVVM (a meno
> di non prevedere un presentation specifico per ogni view, che personalmente
> escludo a priori).

questo secondo me � mandatory :-) � impensabile riutilizzare, senza
piangere in cinese, lo stesso presentation pattern per teconologie
radicalmente diverse.

..m

--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCP
http://mvp.support.microsoft.com
http://blogs.ugidotnet.org/topics
whynot [ at ] topics [ dot ] it
  • | Punteggio Post: 20
Top 25 Partecipanti
Maschio
Post 10
Punteggio 170

questo secondo me � mandatory :-) � impensabile riutilizzare, senza
piangere in cinese, lo stesso presentation pattern per teconologie
radicalmente diverse

beh, non sono molto d'accordo su "impensabile"... cmq magari avremo modo di confrontarci sull'argomento.

Scusa, tornado all'argomento iniziale, quindi tu come imposti la classica client/server intranet con autenticazione integrata? Una SOA con View e Presentation sul client ed il resto lato server con un metodo/operation per ogni caso d'uso nel BizLayer ed un DTO per ogni caso d'uso che lo richiede?

Mario

  • | Punteggio Post: 20
Top 10 Partecipanti
Post 143
Punteggio 2.560
Ciao MarioDuz,

You wrote on 18/11/2009 :
> Scusa, tornado all'argomento iniziale, quindi tu come imposti la classica
> client/server intranet con autenticazione integrata? Una SOA con View e
> Presentation sul client ed il resto lato server con un metodo/operation per
> ogni caso d'uso nel BizLayer ed un DTO per ogni caso d'uso che lo richiede?

non ho una ricetta fissa, dipende tutto molto dal contesto, tipicamente
un servizio Wcf non entra nella mia architettura, ci devono essere
buonissimi motivi per esporre un servizio (nel qual caso
Request/Response pattern basato su messaggi), e ci devono essere ancora
pi�issimi buonissimi motivissimi per orientarmi su SOA.

..m

--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCP
http://mvp.support.microsoft.com
http://blogs.ugidotnet.org/topics
whynot [ at ] topics [ dot ] it
  • | Punteggio Post: 20
Top 25 Partecipanti
Maschio
Post 10
Punteggio 170

:-)

Ok, quindi: o compro un libro di ricette, o cerco la ricetta su Google, o proseguo con la mia vecchia ricetta.

Grazie, ciao!

Mario

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 243
Punteggio 3.383

Personalmente uso questa struttura

Entity che costituiscono il dominio.

Una serie di funzioni di servizio che presentano la logica di business in salsa "Transaction script", ovvero una funzione per ogni macrooperazione es

OrderService.CreateOrder(Date, Lines, etc)

Queste funzioni tornao sempre dei dto, che genero con un generatore t4 cosi non fatico.

Il chiamante, quando deve usare un order service semplicemente lascia risolvere l'interfaccia IORderService dal motore di Ioc. A seconda del file di configurazione ottiene la classe o un wrapper per wcf, cosi se non mi serve non scomodo wcf, ma se mi serve lo posso usare senza trppo infierire sull'architettura.

Detto questo le UI sono tutte mvc, ma tra mvc in winfrom e mvvm su wpf ce ne corre, per cui ogni ui ha solitamente un ulteriore layer che adatta il tutto, sempre basandosi sui servizi.

Es. il web non fa altro che creare degli oggetti ObjectdataSource friendly che internamente delegano ai servizi.

WPF si mangia tutto, con le capacità di binding che ha tiro su pezzi di grafo oggetti e li bindo

Winform è un po più limitato, mi creo dei dto aposit.

E più o meno sopravvivo allegramente

:)

  • | Punteggio Post: 20
Top 25 Partecipanti
Maschio
Post 10
Punteggio 170

Ciao Alk, grazie.

Mi sembra a grandi linee quello che immaginavo, giusto?

> Scusa, tornado all'argomento iniziale, quindi tu come imposti la classica
> client/server intranet con autenticazione integrata? Una SOA con View e
> Presentation sul client ed il resto lato server con un metodo/operation per
> ogni caso d'uso nel BizLayer ed un DTO per ogni caso d'uso che lo richiede?

Sto proseguendo con i miei test, valuterò... :-/

Ciao!

Mario

  • | Punteggio Post: 5
Pagina 1 di 1 (9 elementi) | RSS
Powered by Community Server (Commercial Edition), by Telligent Systems