การเตรียมการสัมภาษณ์ iOS 6 — การพึ่งพาการฉีด
คำถามสัมภาษณ์
- การฉีดพึ่งพาคืออะไรและเหตุใดจึงมีประโยชน์
- คุณช่วยยกตัวอย่างวิธีการใช้การพึ่งพาการฉีดใน iOS ได้ไหม
- การฉีดพึ่งพาประเภทต่างๆ มีอะไรบ้าง (การฉีดคอนสตรัคเตอร์ การฉีดตัวเซ็ตเตอร์ ฯลฯ) และแต่ละประเภทควรใช้เมื่อใด
- สามารถใช้การพึ่งพาการฉีดเพื่อปรับปรุงความสามารถในการทดสอบของแอป iOS ได้อย่างไร
- คุณช่วยพูดคุยเกี่ยวกับความท้าทายทั่วไปหรือข้อผิดพลาดที่เกิดขึ้นเมื่อใช้การพึ่งพาอาศัยกันในการพัฒนา iOS และวิธีหลีกเลี่ยงปัญหาเหล่านั้นได้ไหม
- เฟรมเวิร์กการฉีดพึ่งพา iOS ที่ได้รับความนิยมมีอะไรบ้าง และคุณสมบัติหลักและข้อดีคืออะไร
- คุณสามารถพูดคุยเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้การพึ่งพาการพึ่งพาในการพัฒนา iOS ได้หรือไม่
การผกผันของการควบคุมเป็นรูปแบบการออกแบบซอฟต์แวร์ที่เน้นการถ่ายโอนการควบคุมจากผู้พัฒนาไปยังเฟรมเวิร์ก จากนั้นเฟรมเวิร์กจะรับผิดชอบในการสร้างและจัดการอินสแตนซ์ของออบเจกต์ ในขณะที่นักพัฒนามีหน้าที่รับผิดชอบในการกำหนดค่าเฉพาะของแอป
เป็นรูปแบบที่ให้คุณเปลี่ยนทิศทางของการควบคุมได้ เพื่อให้บรรลุเป้าหมายนี้ คุณจะต้องย้ายความรับผิดชอบทั้งหมดของคลาส ยกเว้นคลาสหลักออกไปภายนอก ทำให้พวกเขาต้องพึ่งพากัน ดังนั้นวัตถุของคุณจึงไม่ทราบวิธีการสร้าง สิ่งนี้ทำให้โค้ดสามารถทดสอบและบำรุงรักษาได้โดยกำจัดความสัมพันธ์ที่แน่นแฟ้นระหว่างคลาส
การฉีดพึ่งพา
การพึ่งพาการฉีดเป็นหนึ่งในไม่กี่รูปแบบที่ใช้หลักการของการผกผันของการควบคุม คุณสามารถใช้ DI ได้หลายวิธี
คอนสตรัคอินเจ็คชั่น
ใน Constructor Injection เราส่งการพึ่งพาทั้งหมดผ่านตัวสร้างเป็นพารามิเตอร์
protocol EngineProtocol {
func start()
func stop()
}
protocol TransmissionProtocol {
func changeGear(gear: Gear)
}
final class Car {
private let engine: EngineProtocol
private let transmission: TransmissionProtocol
init(engine: EngineProtocol, transmission: TransmissionProtocol) {
self.engine = engine
self.transmission = transmission
}
}
final class Car {
private var engine: EngineProtocol?
private var transmission: TransmissionProtocol?
func setEngine(engine: EngineProtocol) {
self.engine = engine
}
func setTransmission(transmission: TransmissionProtocol) {
self.transmission = transmission
}
}
แนวคิดหลักคือชิ้นส่วนของโค้ดที่ต้องการการขึ้นต่อกันบางอย่างจะไม่สร้างมันขึ้นมาเอง แต่การควบคุมการให้การขึ้นต่อกันเหล่านี้จะถูกเลื่อนออกไปเป็นนามธรรมที่สูงกว่า
ประโยชน์หลักของInversion of Controlก็คือ
- DI ช่วยปรับปรุงความเป็นโมดูลของโค้ดของคุณ ง่ายต่อการเข้าใจและบำรุงรักษา
- ง่ายต่อการแทรกการจำลองหรือการพึ่งพาปลอมระหว่างการทดสอบ
- ความยืดหยุ่นและความสามารถในการขยายของแอปของคุณ โดยให้คุณเปลี่ยนหรือสลับการอ้างอิงที่ใช้โดยส่วนประกอบของคุณได้อย่างง่ายดาย