Nella nostra azienda disponiamo di due grandi sistemi, in pratica punteggio e CRM. Entrambi hanno grandi database SQL Server in esecuzione su server Windows sulla intranet. Questi due database sono gestiti da un altro dipartimento, con il quale abbiamo un contatto diretto.
Nessuno di questi sistemi ha API esterne tranne alcune stored procedure (di seguito "SP"), che utilizziamo per inserire tutti i dati dal nostro team (web-dev team), che sono un sito Web pubblico e un CRM basato sul Web.
Ci sono problemi che rendono questo tipo di integrazione un incubo:
-
Non ci sono copie appropriate dei database da testare. Ci sono alcune copie occasionali che possono o non possono essere aggiornate e sincronizzate manualmente, il che le rende praticamente inutili in "situazioni ASAP" (sempre).
-
Tutti i tipi di modifiche nel codice delle stored procedure vengono eseguite direttamente nei database di produzione (!!!), che ovviamente ci causano molti problemi.
-
Il codice delle stored procedure non è documentato, mal commentato e per lo più non ben scritto. Solo per dire che ho passato gli ultimi due giorni a "decifrare" due SP, uno dei quali è ~ 2400 SLOC lungo e ha molti numeri magici e vars come
@str1
.
Per semplificare e rendere più sicuro :
-
Abbiamo creato una sorta di "server-API", che è fondamentalmente un server SOAP che fa interrogazioni agli SP e restituisce qualsiasi query restituita insieme ad alcuni messaggi di stato. Questo ci aiuta a sganciare le nostre app dal caos, ma semplifica a malapena il nostro compito quando si tratta di scrivere e testare nuove funzionalità.
-
Archiviamo alcuni ID e altre costanti da questi database nei nostri database per evitare l'utilizzo di numeri magici nel nostro codice ogni volta che è possibile, ma dobbiamo comunque raccogliere e compilare tutti i dati manualmente con sqlcmd (che è molto scomodo a causa della disabilità di
cmd
di Windows per gestire la copia, l'incollatura e la visualizzazione del testo).
Desidero che potremmo avere un adeguato processo di test dell'interazione con quei database, ma quello che abbiamo oggi è solo un'altra copia del database CRM che dobbiamo sincronizzare manualmente in qualche modo.
Le mie domande sono :
-
Come possiamo applicare automaticamente tutte le modifiche apportate ai database di produzione nelle copie di prova? Posso pensare a qualcosa come
.bat
-script, ma forse ci sono strumenti migliori. Dubito (a causa dell'esperienza precedente) possiamo chiedere ad altri reparti di fare qualche replica, quindi sto chiedendo qualcosa che possiamo fare da soli e convincere l'altro dipartimento da usare. -
Come possiamo sincronizzare facilmente alcuni dati senza copiare tutti i dati? Ad esempio, abbiamo bisogno di avere una copia aggiornata di tutti i dizionari / tassonomie, ma non i dati sui client (che sono molti dati e richiederà molto tempo per essere copiati). Ancora una volta, sto pensando ad alcuni script, ma potrebbe esserci qualcosa con solo un gruppo di checkbox da selezionare.
-
Qual è l'approccio migliore per testare le interazioni tramite il nostro "server API"? Voglio dire, supponiamo di aver fatto una richiesta tramite SOAP con alcuni dati falsi e che non si siano verificati errori - come posso essere sicuro che i dati ci siano in quel DB esterno ed è coerente? È una sorta di test in nero / grigio e non so come gestirlo.