Dependency Manager

ผมคิดว่าทุกคนที่ทำงานในด้านสายซอฟท์แวร์น่าจะคุ้นเคยกับ Version Control System นะครับ (ผมเคยพูดไปก่อนหน้านี้แล้วนิดหน่อย) วันนี้จะมาพูดถึงซอฟท์แวร์อีกตัวหนึ่งที่ทำงานคู่กับ VCS เจ้านี่มีชื่อว่า Dependency Manager

Dependency คืออะไร ?

ในการเขียนโปรแกรม dependency หมายถึงโปรแกรมที่ไม่ได้เป็นส่วนหนึ่งของโปรแกรมของเรา แต่โปรแกรมของเรามีการเรียกใช้งานครับ

หรือถ้าจะพูดให้รู้เรื่องขึ้นมาอีกนิด มันก็คือบรรดา library ทั้งหลายที่เราเรียกใช้นั่นล่ะครับ

dependency อาจจะเป็นแค่อีกโปรแกรมหนึ่งที่เราเขียนขึ้นมาเอง อยู่ใน workspace/solution เดียวกันก็ได้ (เรียกว่า Internal Dependency) หรือจะเป็นโปรแกรมอื่นที่คนอื่นเขียนแล้วเราเรียกขึ้นมาใช้ (External Dependency)

พอสังเขปก็ประมาณนี้ล่ะครับ

Dependency Manager คืออะไร

Dependency Manager คือซอฟท์แวร์ที่ใช้ในการจัดการบรรดา Dependency ของโปรแกรมที่เราเขียน … แปลกำปั้นทุบดินอีกแล้ว

ที่ว่าจัดการก็คือ มันจะสามารถอ่านไฟล์ Dependency Description ของโปรเจคที่เราทำงานอยู่ว่าใช้ Dependency ตัวไหน เวอร์ชั่นไหน และจะไปทำการไปหา Dependency ที่ว่านี้มาจาก Dependency Repository มาเพื่อใช้งานกับตัวโปรเจคเราครับ และทุกครั้งที่ตัว description มีการเปลี่ยนแปลง มันก็จะทำการเปลี่ยนแปลงบรรดา dependency ที่เราใช้ให้เป็นไปตามที่กำหนดเอา เพื่อไม่ให้การคอมไพล์โปรแกรมมีปัญหาครับ

แล้วเราเก็บ Dependency ไว้ใน VCS ไม่ได้เหรอ ?

ที่จริงในอดีตก่อนจะมี Dependency Manager ใครๆ ก็เก็บพวก library file ทั้งหลายเอาไว้ใน VCS กันล่ะครับ

ปัญหาก็คือ เวลามีคนเช็คอินไฟล์เข้าไปจะไม่มีใครรู้ว่าไฟล์ที่เอาเข้าไปมันเก่ากว่า หรือใหม่กว่า เป็นเวอร์ชั่นที่ไม่ compatible กันเลยหรือเปล่า หรือที่แย่กว่านั้นคือเอาไฟล์ที่เสียเข้าไปด้วยซ้ำ

ในทางปฎิบัติแล้ว ไฟล์ที่อยู่บน VCS ควรเป็นไฟล์ที่สามารถ diff ได้ เพื่อที่จะหาความแตกต่างระหว่างเวอร์ชั่นได้ ไม่เช่นนั้นถึงเราจะมีการเก็บประวัติเอาไว้แต่ก็ไม่รู้ว่าแต่ละเวอร์ชั่นมันต่างกันอย่างไร ก็ไม่มีประโยชน์ครับ

การใช้งาน Dependency Manager มีประโยชน์ตรงที่เราสามารถที่จะแทร๊คได้ว่าเราเคยใช้ Dependency ไหนเวอร์ชั่นไหนบ้าง (เพราะเก็บไฟล์ Dependency Description) เราจะได้รู้ว่ามีใครเล่นแผลง ๆ ใส่ dependency ผิด ๆ ลงมาบ้าง และถ้ามีการต้องเปลี่ยนเวอร์ชั่นของ dependency ก็แค่ตั้งค่าใหม่ ตัวระบบจะไปดึงลงมาให้เอง ไม่ต้องเปิดเวปแล้วหาว่าจะไปโหลดจากเวปไหน ลดโอกาสที่จะเกิดความผิดพลาด และประหยัดเวลาลงไปได้อีกครับ

ประโยชน์อีกอย่างก็คือ เมื่อโปรเจคเราเป็น library ซึ่งทำมาเพื่อให้คนอื่นใช้งานเป็น dependency เราสามารถใช้ Dependency Manager ในการเผยแพร่ library ของเราขึ้นไปบน Dependency Repository ได้ เราไม่ต้องมานั่งก๊อปไฟล์ไปให้โปรเจคอื่นแล้วต้องมานั่งลุ้นว่าเขาจะโหลดของเราไปใช้ได้อย่างราบลื่นหรือเปล่า

ตัวอย่างของ Dependency Manager

ซอฟท์แวร์ประเภทนี้ที่พอจะมีชื่อหน่อยก็คงเป็น Apache Ivy ซึ่งเป็นโปรเจคย่อยของ Ant อีกต่อครับ

แต่นอกจากนี้แล้ว ซอฟท์แวร์ประเภท Build Automation หลาย ๆ ตัวก็มีความสามารถในการจัดการ dependency ในตัว เช่น Apache Maven, Gradle เป็นต้นครับ

ก็ลองดูกันนะครับว่าจะใช้ Dependency Manager ที่เป็นส่วนหนึ่งของ Build Automation หรือใช้ตัวที่เป็น standalone โดยส่วนตัวผมจะใช้ตัวที่รวมกับ Build Automation ในกรณีที่ใช้ Build Automation ครับ ซึ่งปรกติผมก็ไม่ค่อยใช้นะ (แต่ควรใช้ครับ เดี๋ยวคราวหน้าจะพูดถึงในโอกาสต่อไป)

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.