Sto costruendo un'API REST per esporre la maggior parte delle funzionalità di un'API Java esistente. Entrambe le API sono per uso interno all'interno della mia organizzazione; Non devo progettare per uso esterno. Ho influenza su entrambe le API, ma sto implementando quella di REST. L'API Java continuerà ad essere utilizzata per le applicazioni locali (non è "ritirata"), ma l'API REST verrà utilizzata per un nuovo significativo sviluppo.
Alcune classi dell'API Java sono semplicemente dati (fagioli con proprietà, getter, setter). E almeno alcuni di questi hanno senso trasmettere (in qualche modo) sull'API REST come dati (che saranno scansionati in XML o JSON). Ad esempio, una classe che memorizza informazioni su una macchina server. Mi trovo di fronte alla seguente scelta per queste classi di dati: Do I ...
- esporre la classe Java originale (o una sottoclasse) direttamente nell'API REST o
- creare una nuova classe di trasferimento dati (schema DTO) specificamente per l'API REST?
In ogni caso avrò classi di trasferimento dati REST; la domanda è se annotare gli originali o crearne di nuovi (che possono essere vicini alle copie degli originali). Potrebbero esserci altre scelte, ma mi concentrerò principalmente su quelle due.
Argomenti per # 1:
- ASCIUTTO (non ripeterti)
- Più veloce da implementare
- È più facile eseguire l'upgrade dell'API REST
Argomenti per # 2:
- Che cosa succede se l'API REST deve essere versionata separatamente dall'API Java? (Questo è un po 'probabile.)
- Che cosa succede se ci sono modifiche significative alle classi di dati Java come la rimozione di proprietà, l'aggiunta di comportamenti o modifiche alla gerarchia di classi? (Questo è anche un po 'probabile.)
La linea di fondo è che sembra un compromesso tra DRY (n. 1) e disaccoppiamento (n. 2).
Sono propenso ad iniziare con # 1 e poi se i problemi sorgono spostandoci al n. 2 più tardi, seguendo l'agile linea guida di non costruire ciò che non puoi dimostrare di aver bisogno. È una cattiva idea dovrei iniziare con # 2 se penso che potrei finire lassù comunque?
Ci sono argomenti / conseguenze importanti mancanti dai miei elenchi?