ค้นหาเว็บไซต์

javascript - วิธีปฏิบัติที่ดีที่สุดในการสร้าง requestBody ใน loopback 4 คืออะไร?


ตอนนี้ฉันกำลังทำงานกับ Loopback4 และฉันมีปัญหานี้

    @requestBody({
      content: {
        'application/json': {
          schema: getModelSchemaRef(LoginCredentials, {
            title: 'Login'
          })
        },
      }
    }) credentials: LoginCredentials

ในบล็อกโค้ดนี้ ฉันสร้างโมเดลสำหรับร่างคำขอ นี่คือวิธีที่ดีที่สุดในการกำหนดร่างคำขอหรือไม่?

คำตอบ #1

นี่คือวิธีที่ดีที่สุดในการกำหนดเนื้อหาของคำขอหรือไม่?

ใช่ วัตถุประสงค์หลักของโมเดลคือการเป็นอินเทอร์เฟซหลักสำหรับการกำหนดรูปแบบของข้อมูลใดๆ ซึ่งช่วยให้สามารถนำกลับมาใช้ซ้ำในชั้นต่างๆ (เช่น REST และ Repository) และส่งเสริมการสร้างแหล่งความจริงเดียว ซึ่งหมายถึงการบำรุงรักษาโค้ดในระยะยาวที่ดียิ่งขึ้น เพราะช่วยลดปัญหาเช่น การเปลี่ยนแปลงการออกแบบข้อมูลและโค้ดซ้ำซ้อน

มีวิธีอื่นในการกำหนดเนื้อหาของคำร้องขอหรือไม่?

ใช่ ตัวตกแต่ง request body (@requestBody()) รองรับวัตถุของข้อกำหนด OpenAPI 3.0 ดังนั้นจึงสามารถเขียนสเปก OpenAPI แทนการพึ่งพา getModelSchemaRef() เพื่อสร้างจากโมเดลได้ อย่างไรก็ตาม ควรทำอย่างระมัดระวังเพื่อลดปัญหาที่กล่าวถึงก่อนหน้านี้

ถ้าฉันมีโมเดลมากเกินไปล่ะ?

อาร์ติแฟกต์ที่ถูกบูตสามารถจัดเก็บในไดเรกทอรีซ้อนกันได้ ดังนั้น โมเดลสามารถแยกตามโดเมนธุรกิจของพวกมันได้ ตัวอย่างเช่น โมเดลที่เกี่ยวข้องกับการยืนยันตัวตนสามารถจัดเก็บได้ภายใต้ src/models/auth/MyModel.model.ts

การแยกโค้ดยกระดับเหนือโมเดล

อีกทางหนึ่งในการแก้ปัญหาคือการแยกโค้ดออกเป็นคอมโพเนนต์ หากทำอย่างถูกต้อง คอมโพเนนต์จะช่วยให้สามารถแยกโค้ดได้อย่างแทบสมบูรณ์ด้วยการซ่อนตรรกะและสิ่งที่เกี่ยวข้องกับการบูตสแตรปจากฐานโค้ดหลัก ตัวอย่างเช่น โค้ดและสิ่งที่เกี่ยวข้องกับการยืนยันตัวตนทั้งหมด - ไม่ว่าจะเป็นคอนโทรลเลอร์ แหล่งข้อมูล และโมเดล - สามารถเก็บไว้ใต้ src/components/auth/* จากมุมมองของส่วนอื่นของแอปพลิเคชัน สิ่งที่ต้องทำเพียงอย่างเดียวคือการผูกคอมโพเนนต์โดยใช้ app.component(MyAuthComponent) และอาจมีการตั้งค่าการผูกบางอย่าง ซึ่งหมายความว่ามีการแยกความรับผิดชอบอย่างชัดเจน ส่งผลให้การอ่านโค้ดดีขึ้น เนื่องจากนักพัฒนาจะไม่ต้องเห็นรายละเอียดการดำเนินการของโค้ดที่แยกออกเว้นแต่จำเป็น