Ho seri dubbi sul design della mia applicazione Web.
Volevo separare la logica di business dall'interfaccia, quindi ho creato un'API Web che gestisce tutte le richieste al database.
È un'API Web ASP.NET con framework Entity e un'unità di pattern di repository generico e di lavoro. Finora, tutto è buono.
PROBLEMA
Dove ho bisogno di aiuto non riesco a capire un modo efficace per condividere oggetti tra l'API e l'applicazione.
Non voglio serializzare direttamente l'oggetto entità, ho pensato che sarebbe una cattiva pratica, perché se il modello dell'entità cambia, potrei finire con la serializzazione di oggetti di grandi dimensioni senza motivo.
Come è implementato ora
Poiché la mia interfaccia è l'applicazione Web ASP.NET in C # e la mia API è in C #, ho creato una libreria comune con la definizione di tutte le mie classi che voglio condividere tra loro.
So che la soluzione non funzionerà quando svilupperò un'app per Android, dovrò creare nuovamente le mie classi in Java ma non è il mio problema più grande.
Il problema è che mi sento come se stessi sempre convertendo i miei oggetti.
Esempio
Ecco un esempio del mio flusso di lavoro:
Comincio con un modello con tutti gli oggetti e le annotazioni dei dati per il mio modulo, quindi l'utente POSIZERÀ quel modello a un controller.
Nel controller devo convertire questo modello in una classe nella mia libreria comune, quindi inviare quell'oggetto alla mia API.
Quindi un controller nella mia API intercetta la chiamata e converte tale oggetto in un oggetto entità per aggiornare il database.
Quindi ho 3 classi
- Il modello per la vista con tutte le annotazioni di dati per la convalida (Client)
- Le classi di libreria comuni per condividere gli oggetti (DLL)
- Le classi di entità (API)
Ho la sensazione di fare qualcosa di veramente sbagliato. C'è qualcosa di più elegante? Vorrei assicurarmi di avere una buona soluzione per questo problema prima che il progetto diventi troppo grande.