Interfaccia di progettazione per il servizio Web per accedere a diversi database MySQL

4

Attualmente sto cercando di progettare un'interfaccia per un WebService che possa accedere a diversi database MySQL. Ci saranno 4 operazioni disponibili, Aggiungi (), Leggi (), Aggiorna () ed Elimina ().

Il WebService deve semplicemente assemblare un'istruzione SQL basata sul metodo chiamato ed eseguirla sul database di destinazione. Ma ora sto cercando di trovare una buona firma del metodo che fornisca tutte le informazioni necessarie al WebService ed è semplice da usare. Quindi, se voglio assemblare un'istruzione INSERT quando è stato chiamato il metodo Add (), non so come posso passare tutte le informazioni della colonna con i valori e i tipi corrispondenti. Ad esempio, .NET DateTime deve essere memorizzato con il tipo di dati MySQL per data / ora. Quindi ho bisogno di una specie di oggetto wrapper che controlli le proprietà tramite riflessione per ottenere il tipo.

Ecco alcuni pensieri:

Add(String db, String table, Dictionary<String, object> dataSet);
Read(String db, String table, String column, filter?);
Update(String db, String table, String idToReplace, Dictionary<String, object> dataSet);
Delete(String db, String table, String idToDelete);

Non sono sicuro di come specificare una possibilità di filtro per l'istruzione SELECT nel metodo Read (). Inoltre, non so come passare le informazioni sui parametri nei metodi Add () e Update (). Non voglio salvare solo i valori stringa nel db, mi piacerebbe aver passato alcune informazioni sul tipo in modo che il WebService possa abbinarle ai corrispondenti tipi di dati MySQL.

    
posta xmashallax 06.05.2015 - 11:14
fonte

2 risposte

1

Credo che tu stia commettendo un errore fondamentale. WebService è creato per soddisfare alcuni scopi chiari, non solo per operare su dati molto generici.

Ora hai una sorta di metodi semplici e stai cercando di astrarli in modo che siano in grado di fare tutto il lavoro. Questo non scalerà bene. Domani li vorrete (dato che sono davvero MOLTO astratti) per fare ancora un po 'di lavoro e affronteranno una vera sfida per incorporare quel lavoro nella vostra astrazione astratta.

Credimi, aggiungere altri metodi qui non complica le cose. Creando generici generici, stai violando il principio SRP .

Bene, se insisti ... Quindi guarda le firme dei metodi ADO.NET. Credo che si qualificano per il tuo compito.

    
risposta data 10.05.2015 - 23:43
fonte
0

Filtro:

Per implementare un filtro, puoi passare una semplice stringa che è equivalente alla parte "WHERE" dell'istruzione select che viene eseguita, ma non vuoi semplicemente aggiungere direttamente ciò che viene passato all'attuale query che viene eseguita poiché crea un exploit che può essere utilizzato contro il DB. Quindi, invece di usare direttamente la stringa, potresti avere un processo che costruisce la stringa del filtro, in base alla stringa di input.

Ad esempio: analisi e tokenize della stringa. Raggruppa su ciascun token AND / OR. Abbina i valori e gli operatori di confronto a un elenco predefinito, quindi crea la stringa del filtro utilizzando gli elementi dell'elenco predefinito che hai abbinato. Infine concatenare i gruppi AND / OR. Questo potrebbe complicarsi se vuoi implementare tutte le possibili espressioni di filtro.

Per un elenco di cosa implementare, vedi link e link .

Tipi di dati:

Come per digitare gli oggetti in Aggiungi e Aggiorna, i tipi sono già predefiniti dalla tabella MySQL. Pertanto, è possibile compilare in anticipo un elenco di tabelle con i relativi tipi di colonna associati, quindi utilizzare tale associazione per eseguire il cast del dizionario di oggetti una volta che il servizio Web riceve la richiesta. Il lato client sarebbe completamente all'oscuro di questo processo e continuerà a passare i dati come Dictionary<String, object> dataSet . Se incontri una nuova tabella, puoi anche creare una nuova voce di mappatura al volo eseguendo "DESCRIBE table " e memorizzando le informazioni della tabella insieme alle altre che hai già definito.

    
risposta data 11.05.2015 - 01:24
fonte

Leggi altre domande sui tag