Supponiamo di avere una soluzione software con un livello dati che accede a un server SQL. Può farlo direttamente e anche tramite una connessione HTTP. In entrambi i casi vengono utilizzati i set di dati.
Ora, quando la migrazione dai Dataset a soluzioni tecniche più moderne, naturalmente, l'utilizzo di un framework ORM potrebbe essere la scelta naturale. Tuttavia, poiché esisteva il supporto per accedere al database su HTTP in precedenza, se si desidera fare una cosa simile con il framework ORM significa che si sta lavorando con entità distaccate.
Quindi sto cercando strategie per affrontare la migrazione. Potrei usare ORM con entità distaccate e cambiare tracciamento da solo.
Un primo tentativo di utilizzare TrackableEntities è stato piuttosto un disastro (in questo caso abbiamo provato EF 6).
Un secondo tentativo mi sembra abbastanza promettente quando si utilizza un framework difffico come ad esempio ObjectDiffPatch in combinazione con NHibernate. Ciò significherebbe che quando si vuole salvare un oggetto viene creata una diff con l'aiuto di una precedente istantanea. Questo diff è inviato tramite HTTP al server del database in cui il diff è applicato all'entità nella sessione di NHibernate. Ho appreso che non è possibile inviare direttamente l'entità NHibernate, ma invece utilizzare un DTO separato. Anche questi articoli ( Code First non sono validi per dominio , Don 'Utilizzare le entità ORM per modellare il dominio ) suggerisce che dovrei comunque avere una separazione tra i miei modelli di dominio e i modelli di persistenza (riguardo a questi articoli, è solo l'opinione di quell'autore o di una best practice generale?). Lo svantaggio di questo significa avere più definizione di classe (forse alcune cose possono essere generate automaticamente?). Ma concettualmente diffidente sembra funzionare molto bene nei miei prototipi.
Un'altra opzione sembra essere quella di usare CQRS e cambiare l'oggetto sempre con i comandi. Quindi puoi anche inviare facilmente il comando su HTTP.
CQRS può essere visto come la soluzione logica di follow-up in quanto il framework ORM non fornisce qualcosa come entità distaccate immediatamente? Alcuni hanno suggerito di utilizzare un sistema di messaggistica basato su attività (si veda Task, messaggi e transazioni - la santa trinità ) che sembra molto simile al CQRS. È così che CQRS si è evoluta come soluzione mainstream al problema dell'entità distaccata?
Ho letto che gestire entità separate è un'avventura disordinata e alcune persone lo chiamano anti-pattern (il modello di estrazione ). Attualmente penso che il CQRS sia ciò che le persone hanno escogitato come soluzione al problema. È vero?
Puoi anche fornire alcune considerazioni sull'idea di lavorare con diffing per risolvere il problema dell'entità distaccata. Forse conosci già uno scenario in cui qualcosa di simile è stato usato.