Sto creando un'API REST per esporre la maggior parte delle funzionalità di un'API Java esistente. Entrambe le API sono per uso interno nella mia organizzazione; Non devo progettare per uso esterno. Ho influenza su entrambe le API ma sto implementando quella REST. L'API Java continuerà a essere utilizzata per le applicazioni locali (non viene "ritirata"), ma l'API REST verrà utilizzata per un nuovo sviluppo significativo.
Alcune delle classi API Java sono semplicemente dati (bean con proprietà, getter, setter). E almeno alcuni di questi hanno senso trasmettere (in qualche modo) tramite l'API REST come dati (che verranno raggruppati in XML o JSON). Ad esempio, una classe che memorizza informazioni su una macchina server. Devo affrontare la seguente scelta per queste classi di dati: Devo ...
- esporre la classe Java originale (o una sottoclasse) direttamente nell'API REST, oppure
- creare una nuova classe di trasferimento dati (modello DTO) appositamente per l'API REST?
Ad ogni modo avrò classi di trasferimento dati REST; la domanda è se annotare gli originali o crearne di nuovi (che potrebbero essere vicini alle copie degli originali). Potrebbero esserci altre scelte, ma mi concentrerò principalmente su quei due.
Argomenti per # 1:
- ASCIUTTO (non ripeterti)
- Più veloce da implementare
- È più facile aggiornare l'API REST
Argomenti per # 2:
- Cosa succede se l'API REST deve essere controllata separatamente dall'API Java? (Questo è un po 'probabile.)
- Cosa succede se ci sono cambiamenti significativi nelle classi di dati Java come rimozione di proprietà, aggiunta di comportamento o modifiche alla gerarchia delle classi? (Anche questo è un po 'probabile.)
La linea di fondo è che sembra un compromesso tra DRY (# 1) e disaccoppiamento (# 2).
Mi sto inclinando a partire dal n. 1 e quindi se sorgono problemi passando al n. 2 in seguito, seguendo le agili linee guida per non costruire ciò di cui non puoi dimostrare di aver bisogno. È una cattiva idea; dovrei iniziare con il n. 2 se penso che potrei finire lì comunque?
Mancano importanti argomenti / conseguenze dalle mie liste?