2016-01-21 9 views
5

Ho un'applicazione Android che comunica con un server .NET utilizzando i servizi web dell'API WEB. Attualmente, ho oggetti di trasferimento sul server e sul client.Qual è la best practice per la condivisione di modelli tra un server API WEB e un'applicazione client Android

classe Java

public class UserAction { 

    private String username; 
    private String action; 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getAction() { 
     return action; 
    } 

    public void setAction(String action) { 
     this.action = action; 
    } 
} 

mia classe C# sul lato server

public class UserActionTO 
    { 
    public string Username { get; set; } 
    public string Action { get; set; } 
    } 

desidero condividere questi modelli, tra le due applicazioni.

Ho trovato questa domanda discutendo i tipi di condivisione ma la mia situazione è leggermente diversa. Should I share types between a Web API service and its client ? What are the other options?

Sto pensando di creare una dll C++, che sia la mia applicazione Android che l'applicazione C# potrebbero usare. Questa è la mia migliore opzione?

EDIT Sto usando JSON per trasferire i dati

+0

Ho avuto lo stesso problema. Ho creato un modello separato per il back-end (classe C# nel tuo caso) e classi di modelli separate per Android. È stato rielaborazione. – Paritosh

+0

Questo è quello che sto facendo al momento, ma non appena viene aggiunta una proprietà, sì, la sua rilavorazione su entrambi i lati. Mi rendo anche conto che i modelli non sono sincronizzati in fase di runtime. – unicorn2

risposta

2

L'opzione migliore è quella di utilizzare un formato indipendente dalla piattaforma standard (di solito o JSON o XML). Ciò ti dà la massima libertà di variare client e server in qualsiasi modo desideri e semplifica lo sviluppo e i test, dal momento che puoi ispezionare o generare facilmente contenuti.

Se si sta chiedendo un meccanismo semplice per rappresentare il contenuto in memoria su più endpoint, è perfettamente ragionevole creare un "client SDK" (molti servizi online li pubblicano per più linguaggi di programmazione ciascuno) con questi DTO e forse alcune utilità e utilizzare l'appropriato lato server. Generalmente non è una buona idea diventare troppo intelligenti e fare qualcosa come entrare nel codice nativo; mantenere il codice per i DTO nella lingua appropriata (come Java per Android, o forse C# se si usa Xamarin).

2

Poiché si sta già utilizzando JSON per i dati, suggerirei di scrivere una volta in .NET e creare gli oggetti JSON del risultato di esempio. Quindi usa http://www.jsonschema2pojo.org/ per creare il tuo POJOS includerà anche l'annotazione generata in modo da sapere di non modificare la classe.

Un altro vantaggio è che è possibile formattare con gli stili di annotazione di jackson o GSON per serializzare/de-serializzare gli oggetti con un minimo sforzo.

Se si vuole impazzire, è possibile modellare tutto in JSON, quindi disporre di uno script che utilizzi http://json2csharp.com/ per creare i propri POJO Java e http://www.jsonschema2pojo.org/ per Java. Ma non sono sicuro che varrebbe la pena :)

Problemi correlati