โปรแกรมเมอร์ Python ไม่ได้ใช้ Dependency Inversion (DI) เพียงพอ มีสาเหตุหลายประการที่ทำให้ไม่:

  • เป็นเรื่องที่ยุ่งยาก — พลิกกลับ ความเข้าใจตามสัญชาตญาณบางประการเกี่ยวกับการไหลของโค้ด
  • บางครั้งผู้คนทำการ Dependency injection และคิดว่าพวกเขาได้ทำการ Dependency Inversion แล้ว
  • คุณประโยชน์ของ DI นั้นมองเห็นได้ง่ายในโค้ดเบสที่พัฒนาแล้ว แต่การนำ DI ไปใช้กับโค้ดใหม่จะเพิ่มระดับของนามธรรมที่โปรแกรมเมอร์หลายคนรู้สึกว่ายุ่งยาก มันได้รับ "YAGNI" เมื่อไม่ควร

แต่การพึ่งพา Inversion DI สามารถบันทึกโค้ดที่คุณเขียนในวันนี้ไม่ให้ล้าสมัยใน 2 ปี

ยิ่งไปกว่านั้น Python ยังมีฟีเจอร์เนทิฟที่ยอดเยี่ยมที่เรียกว่า Entry Points (สนับสนุนโดย ส่วนใหญ่ บรรจุภัณฑ์ เครื่องมือ) ที่ช่วยให้คุณได้รับความสามารถในการขยายจำนวนมากจากการพึ่งพาการผกผัน อย่างง่ายดาย

นี่คือสิ่งที่ฉันวางแผนจะกล่าวถึงในโพสต์นี้:

  • การผกผันการพึ่งพาคืออะไร (และมีลักษณะอย่างไรใน Python)
  • จุดเข้าใช้งาน Python คืออะไร
  • สองสิ่งนี้มารวมกันได้อย่างไร

หากคุณเป็น Dependency Inversion Champ และรู้สึกว่าคุณมีแนวทางที่ชัดเจนในแนวคิดนี้ (เข้าใจไหม) โปรดอ่านผ่านส่วน Entry Points ได้เลย

การผกผันการพึ่งพาคืออะไร?

คำจำกัดความ

มีคำจำกัดความมาตรฐานของหลักการ Dependency Inversion มันถูกต้องทุกประการ แต่เมื่อคุณเรียนรู้เกี่ยวกับ DI เป็นครั้งแรก คุณจะรู้สึกว่ามันเป็นความลับ ปล่อยให้มันออกไปให้พ้นทาง:

วัตถุระดับสูงไม่ควรขึ้นอยู่กับวัตถุระดับต่ำ ทั้งสองอย่างควรขึ้นอยู่กับนามธรรม

ฉันขอยืมมาจากโลกแห่งแนวคิดที่สร้างคำจำกัดความนั้นเพื่อให้คุณมีโลกที่แตกต่างแต่เข้ากันได้:

ตรรกะหลักของโค้ดของคุณควร กำหนด และ ใช้เฉพาะอินเทอร์เฟซที่ต้องการโต้ตอบด้วย

ตัวอย่างที่น่ารักในการเตรียมเรา

ตรรกะหลักของโค้ดคือส่วนที่กำหนด พิเศษ สิ่งที่คุณต้องการให้ซอฟต์แวร์ทำในแง่ของนามธรรมระดับสูง จำไว้ว่า มีมโค้ดไวรัลนี้ ล้อเล่นเกี่ยวกับวิธีที่พวกเขาจัดการไม่ให้โดรนพุ่งชนแต่ละ...