การ ฝึก ที่ ดี ที่ สุด สําหรับ แบบ จําลอง การ หด ตัว ใน รูป แบบ การ ใช้ เอ็ม วี ซี เพื่อ ความ เป็น ไป ได้

แนะนํา

รูปแบบการถอดแบบแบบ MC (MVC) เป็นรูปแบบหลักของการพัฒนาเว็บมาหลายทศวรรษ อย่างไรก็ตาม เมื่อโปรแกรมเติบโตในความซับซ้อนและความต้องการผู้ใช้เพิ่มขึ้น หลายทีมพบว่าโมเดลของพวกเขา -- ชั้นที่มีส่วนในข้อมูลและตรรกะของธุรกิจ -- โครงสร้างแบบอย่างง่ายนํามาสู่ความยืดหยุ่น, ตรรกะซ้ํากัน, และโครงสร้างโค้ดพื้นฐานที่ต่อต้านการเปลี่ยนแปลง โครงสร้างพื้นฐานพื้นฐานที่บรรลุเป้าหมายของโครงสร้างแบบ วินัย บทความนี้จัดทําการพัฒนาอย่างครอบคลุมสําหรับแบบจําลองการจําลองของ MVC, การออกแบบและงานออกแบบแบบแบบแบบอย่างที่มีประสิทธิภาพ

การ เข้าใจ รูป แบบ ของ MVC

รูปแบบ MVC แยกโปรแกรมเป็นส่วนประกอบ 3 ส่วนจากกันใช้งาน:

ขณะที่มุมมองและตัวควบคุมมีความสําคัญ โมเดลนี้ก็คือที่ที่ความซับซ้อนทางปัญญาส่วนใหญ่อาศัยอยู่ โมเดลที่มีโครงสร้างอย่างดี จะช่วยให้โปรแกรมสามารถปรับตัวเข้ากับความต้องการใหม่ได้ จัดการกับการจราจรที่เพิ่มขึ้น และรองรับส่วนเชื่อมต่อหลายระบบ (เช่น web, pp, API, May) โดยไม่ต้องมีการปรับเปลี่ยน

หลัก การ พื้น ฐาน สําหรับ แบบ จําลอง ที่ รู้ จัก กัน ดี

ก่อน จะ ดํา ลึก เข้า ไป ใน แบบ ที่ เฉพาะ เจาะจง จําเป็น ต้อง มี หลัก การ พื้น ฐาน บาง อย่าง ภาย ใน:

ออกแบบโดเมนแบบ Driven (DDD)

ดี ดี ดี ดี สนับสนุน ให้ ผู้ พัฒนา จัด ระบบ จําลอง รอบ ๆ อาณา เขต หลัก ธุรกิจ แทน ที่ จะ เป็น ห่วง เรื่อง เทคนิค.

ภาษา ที่ มี หลาก หลาย

กําหนดคําศัพท์ที่ใช้ร่วมกันโดยนักพัฒนา ผู้เชี่ยวชาญโดเมน และผู้ถือหุ้น (institute) ใช้คําเดียวกันในรหัส, เอกสารเอกสาร และการสนทนา ตัวอย่างเช่น โปรแกรมอีคอมเม็กซ์ควรมีคลาส [FLT: 0] ที่สะท้อนพฤติกรรมของโลกแห่งความเป็นจริง ไม่ใช่แบบทั่วไป (FLT: 1)

คอนเท็กซ์ที่เชื่อมอยู่

โปรแกรมขนาดใหญ่ประกอบด้วยกลุ่มย่อยหลาย ๆ ตัว DD ขอแนะนําให้กําหนดขอบเขตที่ชัดเจนระหว่างบริบทต่าง ๆ -- ตัวอย่างเช่น การแยกรุ่นสําหรับการจัดการ, รายการสินค้า และการขนส่ง โดยภายในบริบทที่จํากัดไว้แต่ละบริบท จะสามารถปรับให้เข้ากับโดเมนดังกล่าวได้โดยไม่ต้องมีการปล่อยข้อมูลข้ามขอบเขต การแยกประเภทนี้เป็นส่วนสําคัญในการขยายทีมพัฒนาแบบอิสระ

หมวดหมู่

การรวมกลุ่มของวัตถุโดเมนที่ถูกดูแลเป็นหน่วยเดียว องค์กรรากรับประกันความสอดคล้อง ตัวอย่างเช่น การรวม อาจรวม และ (FLT: 4) องค์กรทั้งหมดเข้าถึงผ่านรากของโครงสร้างได้ รูปแบบนี้จะลดความสัมพันธ์ที่ซับซ้อน และลดการปรับเปลี่ยนระบบ

เพื่อ ดํา ลึก ลึก ลง ไป อีก จง พาด พิง ถึง [FLT: 0] มาร์ ติน ฟาว เลอร์ ได้ นํา การ นํา เข้า DDD.

สถาปัตยกรรมเลเยอร์

สถาปัตยกรรมชั้น ๆ เพิ่มขึ้นแยกความกังวลโดยการ ผนวกแบบจําลองเป็น tieers ตรรกะที่แตกต่างกัน:

การแยกทางนี้ ทําให้แน่ใจว่าการเปลี่ยนแปลงเทคโนโลยีฐานข้อมูล กลยุทธ์การจับต้อง หรือกรอบของยูไอไม่ได้ถูกรื้อค้น ด้วยตรรกะหลักของธุรกิจ

การ บริจาค และ การ บริการ

มี สอง แบบ ที่ มี ค่า มาก เป็น พิเศษ สําหรับ การ รักษา แบบ จําลอง ให้ สะอาด และ ยืดหยุ่น ได้:

รูปแบบการกลับค่า

การตั้งค่าคลังข้อมูล รองรับตรรกะการเข้าถึงข้อมูล โดยให้ส่วนติดต่อแบบชุดสะสมกับวัตถุโดเมน แทนการกระจายข้อมูลในฐานข้อมูลผ่านตัวควบคุม คุณจะเรียก [FLT: 5] นามธรรมนี้ช่วยให้การสลับข้อมูล (เช่น จาก MySQL ไป PostgrQL หรือแม้กระทั่งการจัดเก็บข้อมูลในการทดสอบ (in-mory) ด้วยผลกระทบน้อยที่สุด

เลเยอร์ของบริการ

บริการมีตรรกะทางธุรกิจที่ไม่เป็นธรรมชาติขององค์กรเดียว ตัวอย่างเช่น [FLT: 6] อาจมีการประสานงานตรวจสอบความถูกต้อง, ราคา, และรายการสินค้า เมื่อวางลําดับบริการ บริการขึ้นอยู่กับการย้ายสถานะและโดเมน แต่ยังคงอนิจจังของฐานข้อมูล การแยกนี้ยังช่วยให้ใช้งานใช้งานได้โดยผ่านตัวควบคุม, งานเบื้องหลัง, และ APIs

สําหรับการอ่านเพิ่มเติม ดู [FLT: 0] รูปโครงร่างของฟลอเลอร์ .

ข้อมูลการถ่ายโอนวัตถุ (DTOs) และโมเดลมุมมอง

การเปิดเผยโมเดลโดเมนของคุณเต็มไปยังชั้นมุมมอง หรือลูกข่าย API ภายนอก ทําให้เกิดการจับคู่แน่น และมักจะเปิดเผยรายละเอียดภายในที่ไม่จําเป็น แต่ให้ใช้ DTOs เพื่อแปลงข้อมูลให้ตรงกับที่ต้องการ

ดูโมเดลนี้ ทําหน้าที่คล้าย ๆ กับชั้นนําเสนอ โดยมีเฉพาะข้อมูลมุมมองที่จําเป็นต้องแสดง (รวมเข้ากับรูปแบบตรรกะอื่น ๆ เช่น วัน หรือจํานวนทั้งหมด)

ปรับแก้ความไวชัตเตอร์ในฐานข้อมูลเพื่อความจุภาพ

แม้สถาปัตยกรรมแบบที่สะอาดที่สุดจะล้มเหลว หากการเข้าถึงฐานข้อมูลมีความไม่มีประสิทธิภาพ

การทําดัชนี

การวิเคราะห์รูปแบบการค้นหาและสร้างดัชนีบนคอลัมน์ที่ใช้ [FLT: 7] [FLT: 8]] และ[FLT: 8] [FLT: 9] ประโยค overdexing สามารถเขียนช้า ดังนั้นวัดและติดตาม (FLT: 9)

สืบค้นเมื่อ Kinga

ใช้คลังข้อมูลแบบ Redis หรือ memced เพื่อเก็บค่าแกรี่ราคาแพง ค่าแคชที่ใช้ไม่ได้ของคุณ เหมาะกับโดเมนของคุณ (โดยเวลา, ไดรฟ์เหตุการณ์ หรือคู่มือ)

การ ก่อ สร้าง และ การ ทํา งาน แบบ เกียจ คร้าน

ไม่ต้องโหลดข้อมูลขนาดใหญ่เข้าหน่วยความจํา ใช้แบบ petriation หรือแบบตั้งเคอร์เซอร์ หรือ ออฟเซติชัน ใน ORM เปิดใช้งานแบบขี้เกียจสําหรับความสัมพันธ์ของเด็ก แต่จงระวังการสอบถาม N+1 -- เมื่อจําเป็น ให้ใช้การโหลด (เช่น [FLT: 10] ในการใช้งาน record หรือ (FT: 11) ใน SQL).

กําลังโหลดแบบ Lazy vsPreque

การเลือกกลยุทธ์การโหลดที่ถูกต้อง เป็นสิ่งจําเป็นสําหรับการทํางาน

วิธีปฏิบัติ คือปริยายในการโหลดข้อมูลเพื่อเรียกพาธที่รู้จักและใช้การโหลดแบบขี้เกียจ ซึ่งยากจะเข้าถึงได้เท่านั้น โปรดวิเคราะห์ความจุในฐานข้อมูลของคุณภายใต้ความเป็นจริง เพื่อค้นหาความสมดุลที่ถูกต้อง

วางแผนการไล่ระดับสีทางแนวนอน

เมื่อโปรแกรมของคุณโตเกินเครื่องแม่ข่ายเพียงเครื่องเดียว ชั้นแบบจะต้องรองรับการแจกจ่าย:

การใช้งานที่ดีที่สุด

การ ป้องกัน ที่ ขึ้น กับ ความ เป็น ไป ได้

ใช้ตู้ฉีดน้ําที่เชื่อมโยง เพื่อแก้ปัญหาความขึ้นต่อกันของคลังแพกเกจและการบริการ การสร้างแบบจําลองการถอดส่วนออกจากกระบวนการสร้างคอนกรีตนี้ และทําให้มันง่ายต่อการสลับส่วนประกอบสําหรับการทดสอบหรือปรับขนาด

การไม่จํากัด

เมื่อเป็นไปได้ วัตถุออกแบบที่จะใช้ในการถอดเสียบ (FLT: 12) คลาสที่ลดข้อผิดพลาดที่เกี่ยวข้องกับการเปลี่ยนชื่อและความต่อเนื่อง นอกจากนี้ แบบจําลองการถอดภาพนั้นสามารถทดสอบและจัดเก็บข้อมูลได้ง่ายขึ้น

การ ทดสอบ ใน การ แยก ตัว

การทดสอบของหน่วยบริการและโดเมน ไม่ควรต้องใช้ฐานข้อมูลหรือกับดักกรอบการจับต้อง ใช้การจําลองการจําลองหรือการจําลองค่าภายใน

เลเยอร์ก่อนการแก้กระดาษ

เมื่อทําการผนวกเข้ากับระบบมรดก หรือระบบเอพีไอภายนอก จงสร้างเลเยอร์ที่ต่อต้านการปนเปื้อน ซึ่งจะแปลระหว่างรุ่นของคุณกับรุ่นของระบบภายนอก ซึ่งจะป้องกันไม่ให้การเปลี่ยนแปลงภายนอก รั่วไหลเข้าไปในโดเมนของคุณ

การ พิจารณา เอกสาร และ รหัส

โครงสร้างแบบมักจะกลายเป็นแบบ OPAque เมื่อเวลาผ่านไป รักษาบันทึกการตัดสินใจสถาปัตยกรรม (ADRs) และบังคับใช้ความสอดคล้องผ่านโค้ดรีวิว รุ่นที่มีเอกสารกํากับดี ๆ จ่ายเงินให้เมื่อนําสมาชิกในทีมใหม่ขึ้นมา หรือกลับมาทบทวนในโมดูลอีกเดือนต่อมา

รูปแบบการวน

การจับต้องแบบจําลองการแยกประเภทเพื่อความจุในรูปแบบ MVC ไม่ใช่การฝึกแบบแบบเดียวแต่เป็นการใช้ระเบียบวินัยอย่างต่อเนื่อง โดยยึดหลักการเช่น การแยกปัญหา การใช้สถาปัตยกรรม DDD และชั้น และโครงสร้างชั้นอย่างชาญฉลาด การใช้โครงสร้างแบบรีพอสซิต การบริการ และ DTOs คุณสามารถสร้างชั้นแบบที่สามารถเติบโตได้กับโปรแกรมของคุณ การใช้ข้อมูลแบบ Opimative language เลือกกลยุทธ์การโหลดที่ถูกต้อง และการวางแผนการวางผังโปรแกรมของคุณต่อไป เพื่อให้แน่ใจว่าโปรแกรมของคุณยังคงดําเนินการอยู่ ภายใต้การโหลดของโครงการของคุณ โปรดจําไว้ว่า สถาปัตยกรรมนั้นเกี่ยวข้องกับการจําหน่ายสินค้า -- การวางแผงวัดผลลัพธ์ และวัดผลลัพธ์

สําหรับการสํารวจเพิ่มเติม โปรดพิจารณาศึกษา (FLT: 0) บทความเกี่ยวกับหนังสือออกแบบโดเมนของเอแวนส์ (FLT:1) และ ReLT: [FLT] Reckricing รูปแบบของ . ทรัพยากรเหล่านี้ทําให้เข้าใจลึกซึ้งมากขึ้น ในรูปแบบที่กล่าวมานี้.