Architecture Decision Record

Active theme: Light

← مثال‌های رکورد تصمیم

رکورد تصمیم معماری: جعبه‌ابزار کتابخانهٔ نمودار برای مصورسازی داده با TypeScript و JSON

هدف اصلی:
انتخاب جعبه‌ابزار نمودار پیشرفته برای ایجاد مصورسازی‌های تعاملی، با تمرکز بر داده‌های مالی، داده‌های علمی و داده‌های دولتی با استفاده از TypeScript و JSON. کتابخانه باید ویژگی‌های مقاوم و انعطاف ارائه دهد و متن‌باز باشد.

زمینه و نیازمندی‌ها:

  1. توسعهٔ چابک (اولویت بالا): به‌عنوان یک استارتاپ، تکرار سریع، نمونه‌سازی و انعطاف در توسعه ضروری است. کتابخانهٔ نمودار باید چرخه‌های توسعهٔ سریع را ممکن کند.

  2. انواع نمودار (اولویت بالا):

    • نمودار دونات (Doughnut Chart)
    • نمودار رادار (Radar Chart)
    • نمودار فرایند خوشه‌بندی (Clustering Process Chart)
    • نمودار ناحیه‌ای با محور زمان (Area Chart with Time Axis)
    • نمودار شمعی (Candlestick Chart)
    • نمودار نایتینگل (Nightingale Chart)
    • نقشهٔ 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 در ارائهٔ نمودارهای تعاملی با ویژگی‌هایی مانند بزرگ‌نمایی، پیمایش و به‌روزرسانی پویای داده برتری دارد.
  • دونات، رادار، شمعی، نقشه‌های SVG جغرافیایی: ECharts از بسیاری از انواع نمودار لازم، از جمله دونات، رادار، شمعی و مصورسازی نقشهٔ جغرافیایی، پشتیبانی می‌کند.
  • رایگان و متن‌باز: ECharts کتابخانه‌ای متن‌باز است که با ماهیت بودجه‌محور استارتاپ سازگار است و آزادی تغییر کد را فراهم می‌کند.
  • انعطاف‌پذیری و قابلیت گسترش: بسیار قابل‌سفارشی‌سازی، با پشتیبانی گسترده از انیمیشن‌ها، مصورسازی‌های سفارشی و تکنیک‌های نمودارسازی پیشرفته.

نقاط ضعف:

  • منحنی یادگیری: ECharts، هرچند قدرتمند، به دلیل انعطاف و API گسترده‌اش می‌تواند منحنی یادگیری تندتری داشته باشد.
  • پیچیدگی مستندات: مستندات جامع‌اند اما برای توسعه‌دهندگانی که تازه با آن شروع می‌کنند می‌توانند طاقت‌فرسا باشند.

نتیجه‌گیری:
ECharts به دلیل پشتیبانی از نمودارهای تعاملی، از جمله همهٔ انواع لازم مانند نمودارهای شمعی، نمودارهای رادار و نقشه‌های جغرافیایی، برای پروژه بسیار مناسب است. ماهیت متن‌باز آن با نیاز پروژه به انعطاف و مقرون‌به‌صرفه بودن همخوان است.


2. Chart.js

مرور کلی:
Chart.js کتابخانهٔ نمودار ساده و آسان برای استفاده‌ای برای ساخت انواع نمودار رایج است. به سادگی و سهولت ادغام شناخته می‌شود.

نقاط قوت:

  • سهولت استفاده: Chart.js راه‌اندازی و استفادهٔ بسیار ساده‌ای دارد، با حداقل منحنی یادگیری.
  • متن‌باز: Chart.js رایگان و متن‌باز است، که برای کاهش هزینه‌ها حیاتی است.
  • انواع نمودار رایج: از نمودارهای پایه مانند دونات، ناحیه‌ای، رادار و خطی پشتیبانی می‌کند که بیشتر نیازهای اصلی را پوشش می‌دهند.

نقاط ضعف:

  • نمودارهای پیشرفتهٔ محدود: Chart.js به‌طور بومی از انواع نمودار پیچیده مانند نمودارهای شمعی، نقشه‌های SVG جغرافیایی یا نمودارهای فرایند خوشه‌بندی پشتیبانی نمی‌کند. هرچند این ویژگی‌ها را می‌توان از طریق افزونه‌ها یا سفارشی‌سازی افزود، به سادگی کتابخانه‌های دیگر نیست.
  • تعامل: هرچند Chart.js از تعامل پایه (مانند tooltip و اثرات hover) پشتیبانی می‌کند، ویژگی‌های پیشرفته‌ای به اندازهٔ ECharts یا D3.js ارائه نمی‌دهد.

نتیجه‌گیری:
Chart.js برای پروژه‌های ساده و سریع عالی است، اما نبود پشتیبانی از انواع نمودار پیچیده آن را برای یک برنامهٔ داده‌محور با نیازهای پیشرفته مانند نمودارهای شمعی و نقشه‌های جغرافیایی نامناسب می‌کند. برای نمونه‌سازی انتخاب خوبی است، اما برای انواع نمودار لازم، ابزارهای پیشرفته‌تر توصیه می‌شود.


3. ApexCharts

مرور کلی:
ApexCharts کتابخانهٔ نمودار مدرنی است که انواع نمودار را ارائه می‌دهد و با API آسان برای استفاده بر مصورسازی‌های تعاملی تمرکز دارد.

نقاط قوت:

  • ویژگی‌های تعاملی: ApexCharts نمودارهای تعاملی با tooltip، بزرگ‌نمایی، پیمایش و به‌روزرسانی ارائه می‌دهد.
  • پشتیبانی از نمودارهای مالی و علمی: از انواع نمودار گوناگون، از جمله نمودارهای شمعی، رادار و ناحیه‌ای، پشتیبانی می‌کند.
  • سهولت استفاده: API سرراست دارد و ادغام آن در پروژه ساده است.
  • رایگان و متن‌باز: ApexCharts نسخهٔ متن‌باز رایگانی ارائه می‌دهد که برای موارد استفادهٔ بسیاری مناسب است.

نقاط ضعف:

  • سفارشی‌سازی پیچیده: هرچند ویژگی‌های بسیاری ارائه می‌دهد، گزینه‌های سفارشی‌سازی برای نیازهای نمودارسازی بسیار پیچیده یا سفارشی به اندازهٔ ECharts یا D3.js انعطاف‌پذیر نیستند.
  • نقشه‌های جغرافیایی: ApexCharts به‌طور بومی از نقشه‌های جغرافیایی یا نمودارهای فرایند خوشه‌بندی، که برای این پروژه لازم‌اند، پشتیبانی نمی‌کند.

نتیجه‌گیری:
ApexCharts به دلیل سهولت استفاده و تعامل، دعوی‌دار قوی‌ای است، اما در برخی انواع نمودار پیشرفته، به‌ویژه نیاز به نقشه‌های جغرافیایی و نمودارهای خوشه‌بندی، کم می‌آورد. برای نمودارهای ساده‌تر گزینهٔ خوبی است اما برخی ویژگی‌های لازم را ندارد.


4. AG Charts

مرور کلی:
AG Charts کتابخانهٔ نمودار در سطح تجاری است که برای کارایی و دقت طراحی شده است. برای ساخت داشبوردهای مالی، علمی و کسب‌وکاری بسیار مناسب است.

نقاط قوت:

  • انواع نمودار پیشرفته: AG Charts از بسیاری انواع نمودار پیشرفته، از جمله نمودارهای شمعی، نمودارهای ناحیه‌ای، نمودارهای رادار و بیشتر پشتیبانی می‌کند. همچنین ادغام عمیق با سایر محصولات AG-Grid ارائه می‌دهد.
  • کارایی بالا: کارایی عالی، به‌ویژه هنگام کار با مجموعه‌داده‌های بزرگ، ارائه می‌دهد.
  • تعامل: AG Charts از انواع ویژگی‌های تعاملی مانند بزرگ‌نمایی، tooltip و به‌روزرسانی‌های پویا پشتیبانی می‌کند.

نقاط ضعف:

  • کاملاً رایگان نیست: هرچند 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 برای پروژه‌های ساده‌تر گزینه‌های خوبی‌اند اما از انواع نمودار پیشرفته پشتیبانی نمی‌کنند.