ฉันกำลังทำงานในสถาปัตยกรรมมันจะให้ api ที่เหลือสำหรับเว็บไคลเอ็นต์และแอพมือถือ ฉันกำลังใช้สปริง (สปริง mvc, สปริงข้อมูล jpa, ... ฯลฯ ) รูปแบบโดเมนนั้นมีรหัสด้วย JPA
ฉันพยายามที่จะใช้แนวคิดบางอย่างของสถาปัตยกรรมที่สะอาด ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html ) ไม่ใช่ทั้งหมดเพราะฉันจะคงรูปแบบโดเมน jpa ไว้
การไหลที่แท้จริงผ่านเลเยอร์คือ:
ส่วนหน้า <--> บริการ API -> บริการ -> พื้นที่เก็บข้อมูล -> ฐานข้อมูล
- ส่วนหน้า : เว็บไคลเอ็นต์แอปมือถือ
- บริการ API : Rest Controllers ที่นี่ฉันใช้ตัวแปลงและ dto's และบริการโทร
- บริการ : การเชื่อมต่อกับการใช้งานและมีตรรกะทางธุรกิจ
- พื้นที่เก็บข้อมูล : ส่วนต่อประสานที่เก็บข้อมูลที่มีการใช้งานโดยอัตโนมัติ (ทำโดย data ฤดูใบไม้ผลิ jpa) ซึ่งมีการดำเนินการ CRUD และอาจมีการสอบถาม sql บางส่วน
ข้อสงสัยของฉัน: ฉันควรใช้เลเยอร์พิเศษระหว่างบริการและที่เก็บ?
ฉันกำลังวางแผนโฟลว์ใหม่นี้:
ส่วนหน้า <--> บริการ API -> บริการ -> ความคงทน -> พื้นที่เก็บข้อมูล -> ฐานข้อมูล
เหตุใดจึงต้องใช้เลเยอร์การคงอยู่นี้ ตามที่กล่าวไว้ในบทความสถาปัตยกรรมที่สะอาดฉันต้องการมีการใช้บริการ (ตรรกะทางธุรกิจหรือกรณีการใช้งาน) ที่เข้าถึงเลเยอร์คงอยู่ไม่เชื่อเรื่องพระเจ้า และไม่จำเป็นต้องเปลี่ยนแปลงหากฉันตัดสินใจใช้รูปแบบ "data access" อื่นเช่นถ้าฉันตัดสินใจหยุดใช้ที่เก็บ
class ProductServiceImpl implements ProductService {
ProductRepository productRepository;
void save(Product product) {
// do business logic
productRepository.save(product)
}
}
ดังนั้นฉันจึงใช้เลเยอร์คงอยู่เช่นนี้:
class ProductServiceImpl implements ProductService {
ProductPersistence productPersistence;
void save(Product product) {
// do business logic
productPersistence.save(product)
}
}
และการนำเลเยอร์ติดตามาใช้เช่นนี้
class ProductPersistenceImpl implements ProductPersistence {
ProductRepository productRepository;
void save(Product product) {
productRepository.save(product)
}
}
ดังนั้นฉันจะต้องเปลี่ยนการใช้งานของชั้นการคงอยู่ออกจากบริการโดยไม่มีการเปลี่ยนแปลงควบคู่ไปกับความจริงที่ว่าพื้นที่เก็บข้อมูลที่เกี่ยวข้องกับกรอบ
คุณคิดอย่างไร? ขอบคุณ