13 messaggi dal 06 gennaio 2006
Ciao a tutti,
ho un progetto che utilizza angularjs per il frontend e webapi/odata con protocollo rest per la parte di backend. Come Orm utilizzo Entity framework.

Mi trovo davanti a un bivio per poter aggiornare in modo sensato entità complesse.
In mente avevo due modi, avendo entità che hanno relazioni con altre entità (Es ordine che è in relazione con i clienti che p in relazioni con i suoi figli). Il primo è fare dei micro salvataggi ogni qual volta modifico qualcosa (es, cambio cliente, aggiungo un dettaglio ecc...) il secondo è fare tutte le modifiche su client e poi mandare tutto al server.

Nel primo caso non ho problemi perchè lavoro sempre su una sola entità, nel secondo caso non sapendo a priori cosa è cambiato sul db non so se esiste qualche best practice per implementare questo comportamento nel modo migliore

Qualcuno di voi ha esperienza in merito oppure sa da darmi qualche consiglio su come muovermi?

Grazie a tutti

Ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
penso che quando devi modificare grafi di oggetti dal client, BreezeJS sia un'ottima scelta, soprattutto perché stai già usando Web API ed EntityFramework.
Leggi questo articolo introduttivo di Stefano Mostarda.
http://www.linqitalia.com/articoli/entity-framework/utilizzare-libreria-breezejs-webapi-entity-framework-gestire-accesso-dati-javascript.aspx

Potrai lavorare con le entità del tuo modello come se ti trovassi lato server. Grazie all'EntityManager, le modifiche agli oggetti verranno tracciate ed inviate tutte insieme al server invocando il suo metodo SaveChanges.

Puoi ovviamente fare query sfruttando la sintassi di interrogazione OData. Lato client, potrai comporre la query in una maniera che ti sembrerà familiare, come se stessi usando LINQ.

Leggi questo articolo su come integrarlo ad AngularJS.
http://www.getbreezenow.com/documentation/breeze-angular

ciao,
Moreno
Modificato da BrightSoul il 18 marzo 2015 23.37 -

Enjoy learning and just keep making
13 messaggi dal 06 gennaio 2006
Ciao moreno, grazie per la risposta.
Avevo letto qualcosa di breeze, ma non ho nai provato ad usarlo, in generale pero' volevo capire se c'era una soluzione senza utilizzarlo breeze e come un problema cosi poteva essere risolto
Tu hai mai affrontato un problema simile?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

ianselmi ha scritto:

pero' volevo capire se c'era una soluzione senza utilizzarlo breeze

Certamente, esistono varie possibilità, un po' come quando devi affrontare un viaggio.

Puoi scrivere tu tutto il codice javascript che serve a realizzare la funzionalità che ti serve, ma questo equivarrebbe - se mi passi l'analogia - ad andare a piedi a Roma (sono 350Km da casa mia, che è ok se vuoi fare un pellegrinaggio e non ti importa il numero di giorni impiegati).

Se usi Breeze, i passeggeri (ovvero le tue entità) saranno trasportate comodamente da client a server su un autobus che non hai prodotto tu, ma qualcun altro di cui probabilmente dovresti fidarti dato che *si presume* abbia passato il collaudo.

ianselmi ha scritto:

Tu hai mai affrontato un problema simile?

Sì, l'ho risolto con Breeze, anche se la mia applicazione usava Knockout per la presentazione dei dati. Col senno di poi avrei forse usato anch'io Angular JS.
Con Breeze ho incontrato giusto un paio di difficoltà nel momento in cui le mie entità usavano chiavi naturali anziché chiavi surrogate autoincrementanti e quando dovevo gestire relazioni molti a molti (non so se nelle recenti versioni di Breeze ne hanno aggiunto il supporto).
Comunque, è bastato cambiare il tipo di chiave e aggiungere nel modello anche anche la tabella delegata alla relazione molti a molti.

ciao,
Moreno

Enjoy learning and just keep making
13 messaggi dal 06 gennaio 2006
Ciao moreno scusa se non ti ho risposto prima
Sono daccordo con te sull'adozione di strumenti gia pronti ma il mio dubbio era se esisteva lettura riguardante questo argonento e qualche possibile soluzione da adottare oltre ovviamente usare breeze
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, nessun problema!

ianselmi ha scritto:

se esisteva lettura riguardante questo argonento

Cerca "observer pattern javascript", troverai degli articoli e degli esempi sul come tracciare le modifiche apportate ad oggetti e liste.

Tracciare le aggiunte e le rimozioni dalle liste, in particolar modo, è importante per riuscire poi a persistere correttamente tutto nel database con i necessari comandi INSERT, UPDATE e DELETE.

Personalmente, penso che se non potessi usare BreezeJS rinuncerei a tracciare le modifiche lato client. Piuttosto, cercherei di costruire una task-based UI formata da molteplici azioni elementari così la creazione di un oggetto complesso sarebbe suddivisa in più step.
  • Creare la fattura scatena una POST verso /api/fatture
  • Aggiungere una riga scatena una POST verso /api/fatture(id)/righe
  • Impostare il cliente scatena una PUT verso /api/fatture(id)/cliente
  • ...e così via


In questo modo non avrei l'onere di dover tracciare le modifiche e persisterle poi tutte insieme con una sola richiesta ajax.

ciao,
Moreno
Modificato da BrightSoul il 27 marzo 2015 22.33 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.