Ciao ragazzi,
Ho una decisione da prendere per risolvere un problema, sto descrivendo il problema sotto.
Panoramica dell'applicazione
Ho una webApp ASP.NET MVC 4 che utilizza Rest Api per quasi tutte le attività, da Login a CRUD nei record.
Il resto api è stato sviluppato da un team separato disgiunto e la webApp è stata sviluppata da me.
C'èunoscenarioparticolarechemiportaapensarechequalcosanonsiagiustopotrebbeesserel'ApistaavendounproblemaononstosviluppandolaWebAppnelmodogiusto.
HocreatounoschermoperlacreazionedelDipendente,raccogliediverseinformazionirelativeaundipendente,suinvioalserverraccolgoquesteinformazioniserializzandoleinjsoneinviandoleall'URIdellarisorsautilizzandoilmetodoPOST.
Il problema è che per creare un singolo dipendente avrei bisogno di colpire quattro URI di risorse uno per uno, la Persona deve essere creata prima (è il record indipendente) e quindi posso procedere con il person_id per creare Telefono, Email e Indirizzo .
Persona > (Telefono | Email | Indirizzo)
Possibili problemi:
Ora Se la creazione della persona fallisce, mostrerò all'utente che l'operazione è fallita e lui / lei potrebbe riprovare.
Se la creazione della persona ha esito positivo, ma una o più precedenti creazioni del record non riesce, in realtà la creazione del dipendente non riesce, è una specie di transazione che deve essere creata per creare un dipendente.
Anche una persona inutile non ne vale la pena e quindi l'utente dell'applicazione potrebbe tentare di creare nuovamente il dipendente e questo problema potrebbe ripetersi.
Soluzioni possibili
A) Soluzione alla fine: Crea un servizio Windows in esecuzione con un programma di pianificazione, che verifica un DB se le richieste non riuscite sono presenti e, se trova, esegue la richiesta API per completare le attività.
B)SoluzionealivellodiAPI:CreaunURIEmployeeResourcechesiaingradodiricevereiljsondituttiglioggettiJSONdistintiinununicopassaggioerispondereconrisultato.NaturalmentequestioggettijsonseparatipossonocorrispondereatabelleDBseparateelosviluppatoreAPIligestiràattraversolatransazione.
C)UsaQueueBackgroundWorkItemutilizzareQBWIpereseguirerapidamentediverserichiesteasincroneperlerisorsenonriusciteerestituireconilmessaggiononriuscitoeriuscitoancheregistrareeinviareviaemailall'amministratore,nonènecessariogestireunservizioWindowsseparatoeunDB.
Note: Vado per la soluzione B, sembra l'opzione migliore ma a causa del vincolo di tempo potrei aver bisogno di applicare la soluzione (C)
Ragazzi ho bisogno che tu esamini criticamente lo scenario e le sezioni della soluzione e mi fornisca l'analisi e la migliore soluzione possibile.