Architecture Decision Record

Active theme: Light

← ตัวอย่างบันทึกการตัดสินใจ

บันทึกการตัดสินใจด้านสถาปัตยกรรม: ไลบรารีแผนภูมิสำหรับการแสดงข้อมูลด้วย TypeScript และ JSON

เป้าหมายหลัก:
เลือกชุดเครื่องมือแผนภูมิขั้นสูงสำหรับสร้างภาพข้อมูลแบบโต้ตอบ โดยเน้นข้อมูลการเงิน ข้อมูลวิทยาศาสตร์ และข้อมูลภาครัฐ ด้วย TypeScript และ JSON ไลบรารีควรให้ฟีเจอร์ที่แข็งแกร่งและความยืดหยุ่น และเป็นโอเพนซอร์ส

บริบทและข้อกำหนด:

  1. การพัฒนาแบบ agile (ลำดับความสำคัญสูง): ในฐานะสตาร์ทอัป การวนซ้ำที่รวดเร็ว การสร้างต้นแบบ และความยืดหยุ่นในการพัฒนาเป็นสิ่งสำคัญ ไลบรารีแผนภูมิต้องเอื้อให้วงจรการพัฒนารวดเร็ว

  2. ประเภทแผนภูมิ (ลำดับความสำคัญสูง):

    • แผนภูมิโดนัท (Doughnut Chart)
    • แผนภูมิเรดาร์ (Radar Chart)
    • แผนภูมิกระบวนการจัดกลุ่ม (Clustering Process Chart)
    • แผนภูมิพื้นที่ที่มีแกนเวลา (Area Chart with Time Axis)
    • แผนภูมิแท่งเทียน (Candlestick Chart)
    • แผนภูมินิกเกิลไนติงเกล (Nightingale Chart)
    • แผนที่ Geo SVG (Geo SVG Map)

    แผนภูมิประเภทเหล่านี้สำคัญเป็นพิเศษสำหรับการแสดงชุดข้อมูลที่ซับซ้อน เช่น แนวโน้มทางการเงิน เมตริกทางวิทยาศาสตร์ และข้อมูลภูมิศาสตร์

  3. ฟรีและโอเพนซอร์ส (ลำดับความสำคัญสูง): เครื่องมือควรเป็นโอเพนซอร์สเพื่อหลีกเลี่ยงค่าธรรมเนียมใบอนุญาต ให้ความโปร่งใส และให้ความยืดหยุ่นในการปรับแต่ง

  4. เกณฑ์ลำดับความสำคัญต่ำ:

    • ความเร็วขณะทำงาน: แม้ประสิทธิภาพจะสำคัญ แต่ไม่ใช่ลำดับความสำคัญสูงสุดสำหรับการตัดสินใจนี้
    • ความสามารถในการปรับขนาด: แม้โดยทั่วไปการปรับขนาดจะสำคัญ แต่ความต้องการเร่งด่วนคือสร้าง MVP ที่เติบโตได้ตามเวลา ประเด็นการปรับขนาดจัดการภายหลังได้
    • ความเข้ากันได้ย้อนหลัง: ไม่ใช่ข้อกังวลหลักสำหรับการสร้างเบื้องต้น ตราบใดที่ไลบรารีทันสมัยและได้รับการดูแลอย่างต่อเนื่อง

ไลบรารีที่ประเมิน:

  1. Apache ECharts
  2. Chart.js
  3. ApexCharts
  4. AG Charts
  5. Highcharts
  6. Carbon Charts
  7. Layer Cake
  8. D3.js

1. Apache ECharts

ภาพรวม:
Apache ECharts เป็นไลบรารีแผนภูมิที่ทรงพลังและยืดหยุ่นสำหรับภาพข้อมูลแบบโต้ตอบและปรับแต่งได้ รองรับแผนภูมิหลากหลายและแข็งแกร่งเป็นพิเศษสำหรับภาพข้อมูลที่ซับซ้อนและเปลี่ยนแปลงได้

จุดแข็ง:

  • การโต้ตอบขั้นสูง: ECharts โดดเด่นในการให้แผนภูมิแบบโต้ตอบและมีฟีเจอร์เช่นการซูม การแพน และการอัปเดตข้อมูลแบบไดนามิก
  • แผนภูมิโดนัท เรดาร์ แท่งเทียน แผนที่ Geo SVG: ECharts รองรับประเภทแผนภูมิที่จำเป็นส่วนใหญ่ รวมถึงภาพข้อมูลโดนัท เรดาร์ แท่งเทียน และแผนที่ภูมิศาสตร์
  • ฟรีและโอเพนซอร์ส: ECharts เป็นไลบรารีโอเพนซอร์ส ซึ่งเหมาะกับลักษณะที่คำนึงถึงงบประมาณของสตาร์ทอัปและให้เสรีภาพในการแก้ไขโค้ด
  • ความยืดหยุ่นและความสามารถในการขยาย: ปรับแต่งได้สูง พร้อมการรองรับที่กว้างขวางสำหรับแอนิเมชัน ภาพข้อมูลที่กำหนดเอง และเทคนิคแผนภูมิขั้นสูง

จุดอ่อน:

  • เส้นโค้งการเรียนรู้: ECharts แม้ทรงพลัง แต่อาจมีเส้นโค้งการเรียนรู้ที่ชันกว่าเนื่องจากความยืดหยุ่นและ API ที่กว้างขวาง
  • ความซับซ้อนของเอกสาร: เอกสารครอบคลุมแต่อาจท่วมท้นสำหรับนักพัฒนาที่เพิ่งเริ่มต้น

ข้อสรุป:
ECharts เหมาะกับโครงการเป็นอย่างมากเพราะการรองรับแผนภูมิแบบโต้ตอบ รวมถึงประเภทที่จำเป็นทั้งหมด เช่น แผนภูมิแท่งเทียน แผนภูมิเรดาร์ และแผนที่ภูมิศาสตร์ ลักษณะโอเพนซอร์สสอดคล้องกับความต้องการของโครงการด้านความยืดหยุ่นและความคุ้มค่าด้านต้นทุน


2. Chart.js

ภาพรวม:
Chart.js เป็นไลบรารีแผนภูมิที่เรียบง่ายและใช้ง่ายสำหรับสร้างประเภทแผนภูมิทั่วไป เป็นที่รู้จักในเรื่องความเรียบง่ายและการรวมที่ง่าย

จุดแข็ง:

  • ความง่ายในการใช้: Chart.js ตั้งค่าและใช้ง่ายมาก มีเส้นโค้งการเรียนรู้น้อยที่สุด
  • โอเพนซอร์ส: Chart.js ฟรีและเป็นโอเพนซอร์ส ซึ่งสำคัญต่อการลดต้นทุน
  • ประเภทแผนภูมิทั่วไป: รองรับแผนภูมิพื้นฐาน เช่น แผนภูมิโดนัท พื้นที่ เรดาร์ และเส้น ซึ่งครอบคลุมความต้องการหลักส่วนใหญ่

จุดอ่อน:

  • แผนภูมิขั้นสูงที่จำกัด: Chart.js ไม่รองรับประเภทแผนภูมิที่ซับซ้อน เช่น แผนภูมิแท่งเทียน แผนที่ Geo SVG หรือแผนภูมิกระบวนการจัดกลุ่มแบบเนทีฟ แม้ฟีเจอร์เหล่านี้เพิ่มได้ผ่านปลั๊กอินหรือการปรับแต่ง แต่ไม่ตรงไปตรงมาเท่าไลบรารีอื่น
  • การโต้ตอบ: แม้ Chart.js จะรองรับการโต้ตอบพื้นฐาน (เช่น คำแนะนำเครื่องมือและเอฟเฟกต์เมื่อวางเมาส์) แต่ไม่ให้ฟีเจอร์ขั้นสูงเท่า ECharts หรือ D3.js

ข้อสรุป:
Chart.js ยอดเยี่ยมสำหรับโครงการที่เรียบง่ายและรวดเร็ว แต่การขาดการรองรับประเภทแผนภูมิที่ซับซ้อนทำให้ไม่เหมาะกับแอปพลิเคชันที่ใช้ข้อมูลมากซึ่งมีความต้องการขั้นสูง เช่น แผนภูมิแท่งเทียนและแผนที่ภูมิศาสตร์ เป็นตัวเลือกที่ดีสำหรับการสร้างต้นแบบ แต่สำหรับประเภทแผนภูมิที่จำเป็นแนะนำเครื่องมือขั้นสูงกว่า


3. ApexCharts

ภาพรวม:
ApexCharts เป็นไลบรารีแผนภูมิสมัยใหม่ที่เสนอประเภทแผนภูมิหลากหลายและเน้นภาพข้อมูลแบบโต้ตอบด้วย API ที่ใช้ง่าย

จุดแข็ง:

  • ฟีเจอร์แบบโต้ตอบ: ApexCharts ให้แผนภูมิแบบโต้ตอบพร้อมคำแนะนำเครื่องมือ การซูม การแพน และการอัปเดต
  • การรองรับแผนภูมิการเงินและวิทยาศาสตร์: รองรับประเภทแผนภูมิหลากหลาย รวมถึงแผนภูมิแท่งเทียน แผนภูมิเรดาร์ และแผนภูมิพื้นที่
  • ความง่ายในการใช้: มี API ที่ตรงไปตรงมาและรวมเข้ากับโครงการได้ง่าย
  • ฟรีและโอเพนซอร์ส: ApexCharts เสนอเวอร์ชันโอเพนซอร์สฟรีที่เหมาะกับกรณีใช้งานหลายอย่าง

จุดอ่อน:

  • การปรับแต่งที่ซับซ้อน: แม้จะมีฟีเจอร์มากมาย แต่ตัวเลือกการปรับแต่งไม่ยืดหยุ่นเท่า ECharts หรือ D3.js สำหรับความต้องการแผนภูมิที่ซับซ้อนมากหรือกำหนดเอง
  • แผนที่ภูมิศาสตร์: ApexCharts ไม่รองรับแผนที่ภูมิศาสตร์หรือแผนภูมิกระบวนการจัดกลุ่มแบบเนทีฟ ซึ่งจำเป็นสำหรับโครงการนี้

ข้อสรุป:
ApexCharts เป็นผู้สมัครที่แข็งแกร่งเพราะความง่ายในการใช้และการโต้ตอบ แต่ด้อยกว่าในประเภทแผนภูมิขั้นสูงบางอย่าง โดยเฉพาะความต้องการแผนที่ภูมิศาสตร์และแผนภูมิการจัดกลุ่ม เป็นทางเลือกที่ดีสำหรับแผนภูมิที่เรียบง่ายกว่า แต่ขาดฟีเจอร์ที่จำเป็นบางอย่าง


4. AG Charts

ภาพรวม:
AG Charts เป็นไลบรารีแผนภูมิระดับเชิงพาณิชย์ ออกแบบมาเพื่อประสิทธิภาพและความแม่นยำ เหมาะอย่างยิ่งสำหรับการสร้างแดชบอร์ดทางการเงิน วิทยาศาสตร์ และธุรกิจ

จุดแข็ง:

  • ประเภทแผนภูมิขั้นสูง: AG Charts รองรับประเภทแผนภูมิขั้นสูงมากมาย รวมถึงแผนภูมิแท่งเทียน แผนภูมิพื้นที่ แผนภูมิเรดาร์ และอื่น ๆ นอกจากนี้ยังให้การรวมที่ลึกกับผลิตภัณฑ์ AG-Grid อื่น
  • ประสิทธิภาพสูง: ให้ประสิทธิภาพที่ยอดเยี่ยม โดยเฉพาะเมื่อจัดการชุดข้อมูลขนาดใหญ่
  • การโต้ตอบ: AG Charts รองรับฟีเจอร์แบบโต้ตอบหลายอย่าง เช่น การซูม คำแนะนำเครื่องมือ และการอัปเดตแบบไดนามิก

จุดอ่อน:

  • ไม่ฟรีทั้งหมด: แม้ AG Charts จะเสนอเวอร์ชันฟรี แต่เวอร์ชันเต็มรูปแบบเสียค่าใช้จ่าย ซึ่งอาจเป็นอุปสรรคสำหรับสตาร์ทอัปที่ต้องการลดต้นทุน
  • ความซับซ้อน: แม้ไลบรารีจะมีฟีเจอร์มากมาย แต่อาจเกินความจำเป็นสำหรับโครงการที่เรียบง่ายกว่า และอาจต้องการการกำหนดค่าและตั้งค่ามากกว่าเมื่อเทียบกับตัวเลือกอื่น

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


5. Highcharts

ภาพรวม:
Highcharts เป็นไลบรารีแผนภูมิยอดนิยมที่เป็นที่รู้จักในเรื่องประเภทแผนภูมิหลากหลายและตัวเลือกการปรับแต่งที่ทรงพลัง

จุดแข็ง:

  • ประเภทแผนภูมิที่ครอบคลุม: Highcharts รองรับแผนภูมิหลากหลาย รวมถึงแท่งเทียน เรดาร์ พื้นที่ และแผนที่ภูมิศาสตร์
  • โต้ตอบและไดนามิก: Highcharts เสนอฟีเจอร์แบบโต้ตอบที่สมบูรณ์ รวมถึง drill-down การซูม และการแพน
  • ความง่ายในการใช้: มี API ที่เป็นมิตรและเอกสารที่ดี ทำให้เริ่มต้นง่าย

จุดอ่อน:

  • ใบอนุญาตเชิงพาณิชย์: แม้ Highcharts จะเสนอเวอร์ชันฟรีสำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์ แต่ใบอนุญาตเชิงพาณิชย์ราคาแพง ซึ่งอาจเป็นข้อเสียเปรียบสำคัญสำหรับสตาร์ทอัป
  • เส้นโค้งการเรียนรู้: แม้จะไม่ชันเท่า ECharts แต่เส้นโค้งการเรียนรู้ของ Highcharts ยังคงท้าทายสำหรับผู้เริ่มต้น

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


6. Carbon Charts

ภาพรวม:
Carbon Charts เป็นไลบรารีแผนภูมิที่พัฒนาโดย IBM ออกแบบมาเพื่อสร้างแผนภูมิที่สวยงามและปรับแต่งได้สูง

จุดแข็ง:

  • ความสามารถในการปรับแต่ง: Carbon Charts อนุญาตให้ปรับแต่งรูปลักษณ์และพฤติกรรมของแผนภูมิอย่างกว้างขวาง
  • โอเพนซอร์ส: ฟรีและเป็นโอเพนซอร์ส ซึ่งสอดคล้องกับข้อกำหนดของโครงการสำหรับโซลูชันที่ประหยัด
  • การรองรับแผนภูมิทั่วไป: รองรับประเภทแผนภูมิทั่วไป เช่น แผนภูมิโดนัท เรดาร์ และพื้นที่ แต่ขาดการรองรับประเภทขั้นสูงกว่า เช่น แผนที่ภูมิศาสตร์หรือแผนภูมิแท่งเทียน

จุดอ่อน:

  • ประเภทแผนภูมิขั้นสูงที่จำกัด: ไม่รองรับแผนที่ภูมิศาสตร์ แผนภูมิกระบวนการจัดกลุ่ม หรือแผนภูมิแท่งเทียน ซึ่งจำเป็นสำหรับโครงการ
  • ระบบนิเวศที่เล็กกว่า: Carbon Charts มีชุมชนและระบบนิเวศที่เล็กกว่าเมื่อเทียบกับไลบรารีแผนภูมิขนาดใหญ่ เช่น ECharts หรือ Highcharts

ข้อสรุป:
Carbon Charts เป็นโอเพนซอร์สและปรับแต่งได้ แต่ขาดการรองรับประเภทแผนภูมิที่ซับซ้อนกว่าซึ่งจำเป็นสำหรับโครงการนี้ เหมาะกับความต้องการแผนภูมิที่เรียบง่ายกว่า


7. Layer Cake

ภาพรวม:
Layer Cake เป็นไลบรารีการแสดงข้อมูลที่ออกแบบมาเพื่อสร้างภาพข้อมูลแบบชั้นที่ยืดหยุ่น

จุดแข็ง:

  • ชั้นที่ปรับแต่งได้: ให้ตัวเลือกการวางชั้นที่ทรงพลังสำหรับภาพข้อมูลที่ซับซ้อน
  • โอเพนซอร์ส: ฟรีและเป็นโอเพนซอร์ส ทำให้เป็นตัวเลือกที่เป็นไปได้สำหรับโครงการที่คำนึงถึงงบประมาณ

จุดอ่อน:

  • เอกสารที่จำกัด: Layer Cake ขาดเอกสารที่ครอบคลุมและการสนับสนุนจากชุมชน ทำให้ทำงานด้วยยากกว่าเมื่อเทียบกับไลบรารีที่เป็นที่ยอมรับมากกว่า
  • ไม่ได้สร้างมาสำหรับแผนภูมิ: Layer Cake เหมาะกับภาพข้อมูลที่ไม่ใช่แผนภูมิมากกว่า ดังนั้นตัวเลือกแผนภูมิสำเร็จรูปจึงจำกัด

ข้อสรุป:
แม้จะน่าสนใจสำหรับภาพข้อมูลที่เป็นเอกลักษณ์ แต่ Layer Cake ไม่เหมาะกับข้อกำหนดแผนภูมิแบบดั้งเดิม เช่น แผนภูมิแท่งเทียนหรือแผนภูมิเรดาร์ เหมาะกับภาพข้อมูลที่กำหนดเองนอกขอบเขตของแผนภูมิมาตรฐานมากกว่า


8. D3.js

ภาพรวม:
D3.js เป็นไลบรารี JavaScript ที่ทรงพลังสำหรับสร้างภาพข้อมูลที่ขับเคลื่อนด้วยข้อมูลผ่าน HTML, SVG และ CSS

จุดแข็ง:

  • ความยืดหยุ่นที่ไม่มีใครเทียบ: D3.js ให้สร้างภาพข้อมูลที่กำหนดเองได้แทบทุกประเภท ทำให้ทรงพลังมากสำหรับแผนภูมิขั้นสูงและแบบโต้ตอบ
  • ฟีเจอร์ที่ครอบคลุม: รองรับประเภทแผนภูมิที่จำเป็นทั้งหมด รวมถึงแผนที่ภูมิศาสตร์ แผนภูมิการจัดกลุ่ม และอื่น ๆ
  • ปรับแต่งได้: ระดับการปรับแต่งใน D3.js ไม่มีใครเทียบ ช่วยให้นักพัฒนาสร้างภาพข้อมูลที่ปรับแต่งอย่างสูงได้

จุดอ่อน:

  • เส้นโค้งการเรียนรู้ที่ชัน: D3.js มีเส้นโค้งการเรียนรู้ที่ชันและรวมระบบซับซ้อนกว่าเมื่อเทียบกับไลบรารีอื่น
  • ใช้เวลานาน: การสร้างแผนภูมิใน D3.js อาจใช้เวลานาน โดยเฉพาะสำหรับแผนภูมิทั่วไป เช่น แผนภูมิแท่งเทียนหรือโดนัท

ข้อสรุป:
D3.js ทรงพลังอย่างเหลือเชื่อสำหรับแผนภูมิขั้นสูงและกำหนดเอง แต่เกินความจำเป็นสำหรับกรณีใช้งานทั่วไปหลายอย่างเนื่องจากเส้นโค้งการเรียนรู้ที่ชันและเวลาพัฒนา เหมาะที่สุดสำหรับสถานการณ์ที่ไลบรารีแผนภูมิอื่นไม่ให้ระดับการปรับแต่งที่จำเป็น


บทสรุป

หลังจากประเมินไลบรารีตามความต้องการของโครงการ Apache ECharts ปรากฏเป็นตัวเลือกที่ดีที่สุด รองรับแผนภูมิที่จำเป็นครบทั้งสเปกตรัม รวมถึงแผนที่ภูมิศาสตร์ แผนภูมิแท่งเทียน และแผนภูมิการจัดกลุ่ม เป็นโอเพนซอร์ส มีฟีเจอร์มากมาย และโต้ตอบได้สูง ซึ่งสอดคล้องกับเป้าหมายของโครงการอย่างสมบูรณ์แบบ แม้ D3.js จะให้ความยืดหยุ่นสูงสุด แต่ความซับซ้อนและการลงทุนเวลาทำให้เหมาะน้อยกว่าสำหรับสตาร์ทอัปที่ต้องการวนซ้ำอย่างรวดเร็ว ApexCharts และ Chart.js เป็นทางเลือกที่ดีสำหรับโครงการที่เรียบง่ายกว่า แต่ขาดการรองรับประเภทแผนภูมิขั้นสูง