Inversion of Control (IoC)

Inversion of Control หรือ IoC มันเป็นจุดขายของตัว Spring Framework จนหลายๆเจ้าเอาไปปรับใช้เข้ากับ Product ของตัวเองครับ (Microsoft ASP.NET MVC ก็ใช้นะ) ก่อนจะไปใช้กัน เรามารู้กัดีกว่า เจ้าตัว Inversion of Control หรือ IoC มัน คือ อะไรครับ

Inversion of Control หรือ IoC คือ อะไร มีประโยชน์อย่างไร

  • มันมีมาเพิ่มลดความผูกแน่นติดกันของ Object ครับ ตาม Quote นี้เลย
    Do not call us we will call you
  • ใช้ฉีด Object เข้าไปในตอน Runtime ครับ ไม่ต้องมาวุ่นวายกับการจัดการ Obeject ครับ ถ้าใช้มันถูกฉีดเข้ามาเอง
  • ช่วยเพิ่มความสามารถในการ Test ได้มากขึ้น เพราะ มันไม่ผูกติดกันแล้ว
  • Re-used Code ในส่วนของ Business Logic ครับ

แล้ว Inversion of Control (IoC) กับ Dependency Injection เกี่ยวกันยังไง

  • มองง่ายๆครับ Inversion of Control (IoC) มัน คือ แนวคิด เรามี Idea ว่าจะทำให้ Code มัน Maintain ง่าย Test ง่ายๆ และไม่ต้องมาวุ่นวายจัดการ Object
  • Dependency Injection จาก Inversion of Control (IoC) มาสู้การลงมือทำจริงครับ ถ้าในแง่ของ Developer อาจจะพูดได้ว่า
    • Inversion of Control (IoC) = Interface
    • Dependency Injection = Implement
  • ว่าแต่ ทำไมผมถึงมองมันว่าเป็น Interface กับ Implement เพราะ Inversion of Control (IoC) มันเอาไปลงมือทำจริงได้หลากหลายแบบครับ ขอยกบางส่วนมาจาก Wiki ครับ
    • Factory Pattern
    • Service Locator Pattern - ที่วางโครงไว้ใน Framework ของ .NET ที่ บริษัทผมใช้ตัวนี้นะครับ
    • Dependency Injection
    • Template method design pattern

กลับมาที่ Spring ดีกว่าตัว Spring ใช้ Dependency Injection ในการจัดการ Inversion of Control ตัวภาษาของ Java ที่เป็น OOP มีตัว Interface มาช่วยลดการผูดติดกันของ Code มาให้อยู่แล้วครับ