0Pricing
Android Academy · บทเรียน

เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา

ทำให้โค้ดทดสอบได้และเป็นโมดูล

เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

Dependency Injection คืออะไร

Dependency Injection (DI) หมายถึงการส่งสิ่งที่ออบเจ็กต์ต้องการจากภายนอกเข้าไป แทนที่จะให้ออบเจ็กต์สร้างสิ่งเหล่านั้นขึ้นมาเอง

ปัญหา: Dependency ที่เปลี่ยนแปลงได้ยาก

เมื่อคลาสสร้าง dependency ของตัวเอง คลาสนั้นจะเชื่อมโยงกันอย่างแน่นหนา ทำให้เปลี่ยนแปลงหรือทดสอบได้ยาก

class UserViewModel {
    private val repo = UserRepository(
        ApiClient(), AppDatabase.get()
    ) // tightly coupled
}

วิธีแก้: ฉีด Dependency เข้าไปแทน

ส่ง dependency ผ่านคอนสตรัคเตอร์ จากนั้นคลาสจะไม่ต้องสนใจอีกต่อไปว่า dependency เหล่านั้นถูกสร้างขึ้นอย่างไร

class UserViewModel(
    private val repo: UserRepository
) {
    // repo supplied from outside
}

ประโยชน์ที่ 1: ทดสอบได้ง่าย

ในการทดสอบ คุณสามารถส่งรีโพซิทอรีแบบ fake หรือ mock เข้าไปได้ จึงทดสอบ ViewModel ได้โดยไม่ต้องใช้เครือข่ายหรือฐานข้อมูลจริง

val vm = UserViewModel(FakeUserRepository())

ประโยชน์ที่ 2: แยกเป็นโมดูลได้

เนื่องจากคลาสขึ้นต่อกับ สิ่งนามธรรม คุณจึงสลับการนำไปใช้งานได้ — เช่น ใช้ API จริงแทนตัวจำลองแบบออฟไลน์ หรือในทางกลับกัน — โดยไม่ต้องแก้ไขส่วนที่เรียกใช้งาน

ให้ขึ้นต่อกับ Interface

ให้คลาสขึ้นต่อกับ interface ไม่ใช่ชนิดข้อมูลที่เป็นรูปธรรม นี่คือกุญแจสำคัญที่ทำให้สลับการนำไปใช้งานได้ง่าย

interface UserRepository {
    suspend fun getUsers(): List<User>
}

class NetworkUserRepository(
    private val api: ApiService
) : UserRepository { /* ... */ }

ประโยชน์ที่ 3: ความรับผิดชอบเดียว

คลาสมุ่งเน้นเฉพาะงานของตัวเอง ไม่ใช่การสร้างออบเจ็กต์ที่ทำงานร่วมกัน การสร้างออบเจ็กต์จะย้ายไปอยู่ในตำแหน่งเฉพาะแทน

ทำ DI เองแล้วเริ่มยุ่งยาก

คุณสามารถทำ DI ด้วยตนเองได้ แต่เมื่อกราฟมีขนาดใหญ่ขึ้น คุณจะต้องเชื่อมออบเจ็กต์จำนวนมากเข้าด้วยกันด้วยมือ และส่งต่อออบเจ็กต์เหล่านั้นผ่านคอนสตรัคเตอร์ งานนี้น่าเบื่อและมีโอกาสเกิดข้อผิดพลาดได้ง่าย

val db = AppDatabase.get(context)
val api = ApiService.create()
val repo = NetworkUserRepository(api)
val vm = UserViewModel(repo)
// ...repeated everywhere

เริ่มใช้เฟรมเวิร์ก DI

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

ทำไมต้องใช้ Hilt

Hilt เป็นเฟรมเวิร์ก DI ที่แนะนำสำหรับ Android โดยสร้างอยู่บน Dagger และมีคอมโพเนนต์มาตรฐานที่กำหนดขอบเขตให้กับคลาสของ Android เช่น Application, Activity และ ViewModel โดยต้องเขียนโค้ดประกอบน้อยกว่ามาก

Hilt มอบอะไรให้คุณ

  • สร้างกราฟ dependency โดยอัตโนมัติ
  • กำหนดขอบเขตให้สอดคล้องกับวงจรชีวิต
  • ฉีด dependency เข้าไปใน Activities, Fragments และ ViewModels ได้ง่าย

บทเรียนถัดไปจะสอนการตั้งค่า

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับ dependency injection

สรุปทบทวน

คุณได้เรียนรู้ว่า:

  • DI จัดเตรียม dependency จากภายนอก แทนการสร้าง dependency ภายใน
  • ช่วยเพิ่มความสามารถในการ ทดสอบ, แยกเป็นโมดูล และแยกความรับผิดชอบออกจากกัน
  • ให้ขึ้นต่อกับ interface
  • DI ที่ทำด้วยมือรองรับการขยายได้ไม่ดี ส่วน Hilt จะทำให้เป็นอัตโนมัติ

คำถามที่พบบ่อย

บทเรียน “เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา”

ทำให้โค้ดทดสอบได้และเป็นโมดูล คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา
  2. การตั้งค่า Hilt
  3. โมดูลและผู้ให้บริการ
  4. การฉีดเข้า ViewModels
← กลับไปที่ Android Academy