Domanda

Recentemente ho chiesto a questa domanda: Esporre XML o Oggetti - grazie a tutti per le risposte.

Un punto da chiarire.

  • Le API saranno sempre accessibili in remoto (es.come servizio), probabilmente tramite webservices o WCF.

Sono d'accordo che in teoria fortemente tipizzato API di esporre oggetti come gli ingressi/uscite è il a destra modo per andare.Tuttavia, sento che c'è ancora un argomento che deve essere fatto per esporre XML.Per come la vedo io i motivi per l'utilizzo di XML sono:

  1. Le regole di business possono essere scritti da analisti di business in Schematron.
  2. L'interfaccia è debolmente tipizzato, ma non appena si è chiamati i dati possono essere convalidato i dati e le regole di business.
  3. Il servizio di implementazione sarà più semplice.Non ci sarà alcun bisogno di creare un modello di oggetto di dominio.
  4. XML schema è già definito (abbiamo un dizionario di dati di schema).
  5. Utilizzando i servizi web di tecnologia basata su XML API non è necessario modificare come nuova auto: i "tipi" sono aggiunte, ad esempio

    void AddNewCar( string newCarXml )    
    string[] GetCars( /* some query conditions */ )
    

    Se abbiamo utilizzato un oggetto basato su API, quindi l'aggiunta di un nuovo tipo sarebbe necessario un nuovo metodo query di definizione di possibili tipi derivati che potrebbe essere restituito (vedere estendere i servizi web).L'aggiornamento del servizio web come questo richiederebbe questo e servizi tutti clienti esistenti per essere ricostruito e ridistribuiti.

Cosa fa un oggetto basato su API ci danno?Fortemente tipizzato dichiarativa di interfaccia.Non fornire più di astrazione rispetto a XML (XML è di per sé un'astrazione).Che cosa fa l'oggetto API basata su costo?Costa un intero set di oggetti di dominio, che avrà bisogno di regole di business e di convalida dei dati.

Quindi, qual è la mia domanda?Mi danno un non-defeatble, indiscutibile motivo per cui dovrei andare con gli oggetti.

È stato utile?

Soluzione

  • Gli oggetti possono eseguire meglio (pensando serializzazione binaria qui).
  • Gli oggetti possono avere una forte tipo semplice di convalida.
  • Oggetti permettono di mettere la convalida e le regole di business più vicini alla struttura di dati definizione.
  • Oggetti che, per loro natura, consentono di scrivere più semplici regole di business e di convalida, visto che è incorporato nella definizione dell'oggetto stesso.
  • Gli oggetti possono anche definire comportamenti.
  • .Net rende semplice per trasformare Oggetti in Xml e indietro di nuovo tramite la serializzazione, dando oggetti più gli stessi vantaggi di xml.

Altri suggerimenti

Se stai cercando un argomento a favore dell'XML (non che io sia particolarmente a favore di XML) sono:

  • Esponendo XML e di fornire un XSD è auto esplicativo, quando si tratta di dati.È possibile passare tutti i dati nel modulo, è di per sé documentare e può essere convalidato ragionevolmente semplice.

  • Sono in grado di scrivere un sacco di codice di sicurezza contro il mio database o il codice del modello e posso rilasciare i dati in un autonomo e sicuro per le altre unità di business che richiede un minimo di ulteriore documentazione o di una spiegazione.

  • È così di facile lettura, che spesso si può leggere facilmente come si potrebbe leggere la documentazione o i commenti al codice.

Gli argomenti contro di essa, tuttavia, andare su e su...per nome i peggiori trasgressori:

  • Eccessivamente dettagliato.
  • Enorme sovraccarico della rete.
  • Richiedono la conoscenza di un extra di tecnologia, forse inutilmente(?).
  • Più complesso è fare qualcosa, la maggiore opportunità per errori ci sono.

La tipizzazione forte, infatti, alcuna digitazione a tutti per quella materia esiste per la sola ragione che il programmatore non fare stupidi errori (es.il passaggio di una stringa a una funzione che si aspetta un int ecc).In cima a quello, questo avviene in fase di compilazione e non costa nulla in fase di runtime, quindi, la produzione di codice efficiente, evitando i controlli in fase di esecuzione (es.per il corretto getta) e di evitare comportamenti anomali in fase di runtime per il codice non gestito.

Come hai detto tu Xml può essere utilizzato per definire una sostituzione del modello di oggetto, ma questo modello di oggetto deve sottoporsi ai controlli in fase di esecuzione per garantire la massima affidabilità ad un certo punto.Ma questo ha un certo finita sovraccarico di runtime.

Detto questo non voglio dire che la scelta finale è tua.Siete disposti ad abbandonare la sicurezza (e, a volte, la pace della mente) offerto da una "rigida" modello di oggetto o si sarà più a suo agio con una più flessibile, ma può sparare-te-in-the-piede di modello di oggetto?XML richiede una maggiore programmatore disciplina e la vigilanza (e, quindi, rende un lavoro di routine per utilizzare IMHO).

L'oggetto "a base di" API non è così rigida come si pensa, generato automaticamente gli schemi XML maynot fare ciò che si vuole veramente loro di fare.Oggetto basato sulle Api può essere fatta solo flessibile basato su XML API, se essi sono stati progettati bene.La tipizzazione dinamica può aiutare troppo a volte.

Quando si espone XML normale, tutti i clienti avranno bisogno di scrivere il codice per generare e analizzare XML.Facile, in alcune lingue, una PITA in altri.

Ma la maggior parte delle lingue sono le Api del servizio web che può prendere wsdl/xsd e generare un completo client library in pochi secondi.Certo, sarà necessario scrivere una mappatura di utilità per la mappa da loro modello interno per il vostro modello di interagire con voi, ma questo è da aspettarselo.

Il web service si occuperà di tutte le Oggetto<-->XML roba internamente (per la visualizzazione del cliente), non è necessario preoccuparsi di SAPONE e tutto ciò che.Si definiscono i vostri interfaccia:

void addCar(Car newCar);
Car getCar(String make, String model, String year);
void removeCar(...);
List<Car> getAllCars();

che fa un sacco di senso per i vostri clienti.Afferrare il vostro wsdl e generare le loro librerie client in Java, C#, PHP, Python, etc.

Non c'è nulla che vieti l'aggiunta di:

int addCarXML(String carXML);
String getCarXML(int carID);

Ma perché aggiungere due livelli di webservice cruft - primo wsdl, quindi il xsd per lo schema XML...

Date un'occhiata sul web per gli articoli su Primo Contratto di Progettazione, la Primavera del sito web è un buon esempio.Sto sviluppando un nuovo sito web in questo momento e sono preso l'approccio di partenza e XML Schema e il suo utilizzo per realizzare il mio dominio di applicazione del modello.XML è un ottimo per l'invio di dati tra sistemi diversi o anche strati di applicazioni.Esso è un linguaggio di programmazione agnostico e ci sono molti strumenti per l'editing, la progettazione e l'implementazione di base di XML disegni.

È verboso, ma nello schema delle cose, la verbosità è un fastidio minore.È possibile creare file di grandi dimensioni, solo comprimerlo.Non c'è più l'overhead di elaborazione, ma noi sviluppatori sono sempre di negoziazione di prestazione pura, per facilità di uso, manutenzione, aggiornamenti, etc.

Ecco un altro pensiero casuale - non usare nessuno ;-p sto pensando di altri formati di scambio.Ho fatto un sacco di lavoro ultimamente con i buffer di protocollo - questo offre primo contratto di utilizzo (tramite una ".proto" definizione), ma è stato progettato con la sicurezza di estensibilità in mente - cioèè possibile progettare cose passare attraverso i dati imprevisti senza rottura o perdita.Purtroppo, il principale protocollo di buffer spec in realtà non includono l'ereditarietà, ma il mio attuazione (protobuf-net) spessori tramite le estensioni.

Se si è abbastanza maturi dipende lo scenario - ho solo pensato che potrebbe essere di interesse.Come parte, è (protobuf-net), inoltre, si inserisce in WCF per la comodità di una pre-laminati stack RPC ;-p

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top