ฉันกำลังสร้าง REST API เพื่อแสดงการทำงานส่วนใหญ่ของ Java API ที่มีอยู่ API ทั้งสองมีไว้สำหรับใช้ภายในองค์กรของฉัน ฉันไม่ต้องออกแบบเพื่อใช้ภายนอก ฉันมีอิทธิพลเหนือ API ทั้งคู่ แต่กำลังใช้งาน REST อยู่ Java API จะยังคงใช้งานต่อไปสำหรับแอปพลิเคชันในพื้นที่ (ไม่ใช่ "เลิกใช้") แต่ REST API จะใช้สำหรับการพัฒนาใหม่ที่สำคัญ
บางคลาส Java API เป็นเพียงข้อมูล (beans ที่มีคุณสมบัติ, getters, setters) และอย่างน้อยสิ่งเหล่านี้ก็เหมาะสมที่จะส่งผ่าน (ในบางรูปแบบ) ผ่าน REST API เป็นข้อมูล (ซึ่งจะถูกจัดให้อยู่ในรูปแบบ XML หรือ JSON) ตัวอย่างเช่นคลาสที่เก็บข้อมูลเกี่ยวกับเครื่องเซิร์ฟเวอร์ ฉันกำลังเผชิญกับตัวเลือกต่อไปนี้สำหรับคลาสข้อมูลเหล่านี้: ฉัน ...
- เปิดเผยคลาส Java ดั้งเดิม (หรือคลาสย่อย) โดยตรงใน REST API หรือ
- สร้างคลาสการถ่ายโอนข้อมูลใหม่ (รูปแบบ DTO) โดยเฉพาะสำหรับ REST API หรือไม่
ทั้งสองวิธีฉันจะมีคลาสการถ่ายโอนข้อมูล REST; คำถามคือจะใส่คำอธิบายประกอบต้นฉบับหรือสร้างใหม่ (ซึ่งอาจใกล้สำเนาต้นฉบับ) อาจมีตัวเลือกอื่น ๆ แต่ฉันจะเน้นไปที่สองคนนั้นเป็นหลัก
อาร์กิวเมนต์สำหรับ # 1:
- แห้ง (ไม่ต้องทำซ้ำตัวเอง)
- เร็วกว่าที่จะใช้
- ง่ายต่อการอัพเกรด REST API
อาร์กิวเมนต์สำหรับ # 2:
- จะเกิดอะไรขึ้นถ้า REST API จำเป็นต้องแยกรุ่นจาก Java API (อาจเป็นไปได้)
- เกิดอะไรขึ้นถ้ามีการเปลี่ยนแปลงที่สำคัญในคลาสข้อมูล Java เช่นการลบคุณสมบัติการเพิ่มพฤติกรรมหรือการเปลี่ยนแปลงลำดับชั้นของคลาส? (นี่อาจเป็นไปได้เช่นกัน)
บรรทัดล่างคือดูเหมือนว่าการแลกเปลี่ยนระหว่าง DRY (# 1) และ decoupling (# 2)
ฉันเอนตัวไปสู่การเริ่มต้นด้วย # 1 แล้วหากเกิดปัญหาขึ้นมาที่ # 2 ในภายหลังให้ทำตามแนวทางที่คล่องแคล่วของการไม่สร้างสิ่งที่คุณไม่สามารถพิสูจน์ได้ว่าคุณต้องการ นี่เป็นความคิดที่ไม่ดี ฉันควรเริ่มต้นด้วย # 2 หรือไม่ถ้าฉันคิดว่าฉันจะลงเอยด้วย
มีข้อโต้แย้ง / ผลที่สำคัญหายไปจากรายการของฉันหรือไม่?