diff --git a/Documents/Resources/Tools/Document/xUMLDrawer_Case_Study.html b/Documents/Resources/Tools/Document/xUMLDrawer_Case_Study.html new file mode 100644 index 0000000..778a208 --- /dev/null +++ b/Documents/Resources/Tools/Document/xUMLDrawer_Case_Study.html @@ -0,0 +1,1152 @@ + + + + + +معرفی ابزار رسم نمودارهای UML | تحلیل نیازمندی‌ها، معماری و ارزش‌های سازمانی + + + +
+
+
+
+ +
+
+
شماره مستند: UML-TOOL-OVERVIEW-1405-001
+
نسخه: ۱.۰
+
تاریخ تهیه: ۱۷ شهریور ۱۴۰۵ — ساعت ۱۰:۳۰
+
طبقه‌بندی: عمومی / معرفی محصول
+
+
+
+PRODUCT OVERVIEW & ARCHITECTURE +

معرفی ابزار رسم نمودارهای UML

+

تحلیل نیازمندی‌ها، معماری فنی و ارزش‌های سازمانی

+
+
+
+
+همکاران گرامی و علاقه‌مندان به مهندسی نرم‌افزار،
+این مستند به‌عنوان مرجعی جامع برای معرفی «ابزار رسم نمودارهای UML» تهیه شده است. در این مستند، چرایی پیدایش این ابزار، مزایای رقابتی، ارزش‌های سازمانی قابل خلق، معماری دقیق فنی و مخاطبان هدف آن به‌صورت شفاف تشریح می‌گردد. هدف از تهیه این مستند، ارائه دیدگاهی کامل برای تصمیم‌گیری آگاهانه جهت استفاده از این ابزار در فرآیندهای مهندسی نرم‌افزار سازمان‌هاست. +
+ +
+
+
۱
+
+

شرح مسئله و چالش‌های موجود

+
Problem Statement & Industry Challenges
+
+
+
+

در دنیای پیچیده و به‌سرعت در حال تحول مهندسی نرم‌افزار، مدل‌سازی دقیق سیستم‌ها به یکی از ارکان حیاتی موفقیت پروژه‌ها تبدیل شده است. نمودارهای UML (Unified Modeling Language) به‌عنوان زبان استاندارد بین‌المللی برای مدل‌سازی بصری سیستم‌های نرم‌افزاری، نقشی کلیدی در انتقال مفاهیم، طراحی معماری، مستندسازی و ارتباط مؤثر بین ذینفعان ایفا می‌کنند. با این حال، ابزارهای موجود در بازار با چالش‌های متعددی مواجه‌اند که استفاده از آن‌ها را برای بسیاری از تیم‌ها دشوار یا حتی غیرممکن می‌سازد.

+ +
+
+
💸
+

هزینه‌های سنگین لایسنس

+

ابزارهای تجاری معتبر مانند Enterprise Architect، Visual Paradigm و IBM Rational Rose دارای هزینه‌های لایسنس سالانه بسیار بالا هستند که برای بسیاری از سازمان‌ها، به‌ویژه استارتاپ‌ها و شرکت‌های متوسط، مقرون‌به‌صرفه نیست.

+
+
+
🌐
+

وابستگی به اینترنت و سرور

+

بسیاری از ابزارهای مدرن مبتنی بر Cloud هستند و برای اجرا به اتصال اینترنت پایدار و سرورهای خارجی نیاز دارند. این موضوع در محیط‌هایی با محدودیت‌های شبکه، مسائل امنیتی یا قطعی اینترنت، چالش‌برانگیز است.

+
+
+
🔒
+

نگرانی‌های امنیتی و حریم داده

+

ذخیره نمودارهای معماری حساس در سرورهای ابری شخص ثالث، ریسک‌های امنیتی جدی به همراه دارد. سازمان‌های دولتی، نظامی و مالی اغلب نمی‌توانند داده‌های معماری خود را به خارج از شبکه داخلی منتقل کنند.

+
+
+
⚙️
+

پیچیدگی و منحنی یادگیری بالا

+

ابزارهای جامع UML معمولاً دارای رابط کاربری پیچیده، تعداد زیادی ویژگی غیرضروری و منحنی یادگیری طولانی هستند. این موضوع باعث می‌شود که استفاده از آن‌ها برای کارهای سریع و روزمره، زمان‌بر و خسته‌کننده باشد.

+
+
+
📦
+

حجم بالا و نیاز به نصب

+

ابزارهای دسکتاپ معمولاً حجم بالایی دارند (چندین گیگابایت)، نیاز به نصب و پیکربندی دارند و روی همه سیستم‌ها قابل اجرا نیستند. این موضوع برای استفاده در محیط‌های محدود یا سیستم‌های قدیمی مشکل‌ساز است.

+
+
+
🔄
+

عدم پشتیبانی از همه نمودارها

+

بسیاری از ابزارهای رایگان یا سبک، تنها چند نوع محدود از نمودارهای UML را پشتیبانی می‌کنند و امکان رسم کامل هشت نمودار اصلی را به‌صورت یکپارچه فراهم نمی‌آورند.

+
+
+
🌍
+

عدم پشتیبانی از زبان فارسی و RTL

+

اکثر ابزارهای موجود، پشتیبانی مناسبی از زبان فارسی و چیدمان راست‌به‌چپ (RTL) ندارند. این موضوع برای تیم‌های ایرانی، استفاده از نمودارها در مستندات فارسی و ارائه به ذینفعان فارسی‌زبان، یک محدودیت جدی است.

+
+
+
🔗
+

عدم یکپارچگی و پراکندگی ابزارها

+

تیم‌ها مجبورند برای رسم نمودارهای مختلف از ابزارهای متفاوت استفاده کنند که منجر به عدم یکپارچگی بصری، دشواری در نگهداری و افزایش هزینه‌های آموزشی می‌شود.

+
+
+ +
+⚠️ نتیجه چالش‌ها: این معضلات باعث می‌شود که بسیاری از تیم‌های نرم‌افزاری یا از مدل‌سازی UML صرف‌نظر کنند، یا از ابزارهای ناکارآمد استفاده نمایند که در نهایت به کاهش کیفیت طراحی، افزایش خطاهای معماری و کاهش بهره‌وری تیم منجر می‌شود. +
+
+
+ +
+
+
۲
+
+

معرفی راه‌حل و مزایای رقابتی

+
Solution Overview & Competitive Advantages
+
+
+
+

«ابزار رسم نمودارهای UML» پاسخی جامع و حرفه‌ای به چالش‌های مطرح‌شده است. این ابزار با تکیه بر تکنولوژی‌های مدرن وب و معماری هوشمندانه، تجربه‌ای بی‌نظیر از مدل‌سازی بصری را در اختیار معماران، تحلیل‌گران و توسعه‌دهندگان قرار می‌دهد.

+ +

مزایای کلیدی محصول:

+ +
+✅ کاملاً رایگان و بدون لایسنس: این ابزار به‌صورت متن‌باز و کاملاً رایگان ارائه می‌شود. هیچ هزینه لایسنس، اشتراک یا پرداخت درون‌برنامه‌ای وجود ندارد. سازمان‌ها می‌توانند بدون هیچ محدودیتی از آن استفاده کنند. +
+ +
+✅ ۱۰۰٪ آفلاین و بدون نیاز به سرور: تمام عملیات در سمت مرورگر و بدون هیچ‌گونه ارتباط با سرور خارجی انجام می‌شود. این ابزار در محیط‌های کاملاً ایزوله، شبکه‌های داخلی (Intranet) و حتی سیستم‌های بدون اینترنت قابل اجراست. +
+ +
+✅ پشتیبانی کامل از ۸ نمودار اصلی UML: +
    +
  • Use Case Diagram (مورد کاربرد)
  • +
  • Activity Diagram (فعالیت)
  • +
  • State Machine Diagram (ماشین حالت)
  • +
  • Class Diagram (کلاس)
  • +
  • Sequence Diagram (توالی)
  • +
  • Component Diagram (کامپوننت)
  • +
  • Deployment Diagram (استقرار)
  • +
  • Swimlane Diagram (لاین شنا)
  • +
+
+ +
+✅ پشتیبانی کامل از زبان فارسی و RTL: تمامی رابط کاربری، برچسب‌ها، منوها و خروجی‌ها به‌صورت کامل از زبان فارسی و چیدمان راست‌به‌چپ پشتیبانی می‌کنند. فونت حرفه‌ای Vazirmatn برای تایپوگرافی فارسی به‌کار رفته است. +
+ +
+✅ سبک، سریع و بدون نیاز به نصب: حجم ابزار کمتر از ۱ مگابایت است و تنها با یک فایل HTML قابل اجراست. نیازی به نصب، پیکربندی یا وابستگی خارجی ندارد. کافی است فایل را در هر مرورگر مدرنی باز کنید. +
+ +
+✅ امنیت کامل داده‌ها: تمامی داده‌ها به‌صورت محلی و در قالب فایل JSON ذخیره می‌شوند. هیچ اطلاعاتی به سرور خارجی ارسال نمی‌شود. سازمان‌ها کنترل کامل بر داده‌های خود دارند. +
+ +
+✅ تم تاریک و روشن حرفه‌ای: امکان سوئیچ آنی بین تم تاریک و روشن با حفظ ترجیحات در فایل پروژه. این ویژگی برای کار طولانی‌مدت و کاهش خستگی چشم بسیار مفید است. +
+ +
+✅ مدیریت چند نمودار هم‌زمان (Multi-Tab): امکان باز کردن چندین نمودار در تب‌های مجزا و سوئیچ سریع بین آن‌ها. این ویژگی برای پروژه‌های بزرگ با نمودارهای متعدد، بسیار کارآمد است. +
+ +
+✅ خروجی PNG با کیفیت: امکان Export نمودارها به فرمت PNG با قابلیت انتخاب رنگ پس‌زمینه یا شفافیت. مناسب برای استفاده در مستندات، ارائه‌ها و گزارش‌ها. +
+ +
+✅ رابط کاربری شهودی و کاربرپسند: طراحی رابط کاربری بر اساس اصول UX مدرن، با ابزارهای دسته‌بندی‌شده، کلیدهای میانبر، Properties Panel و ویرایشگرهای پیشرفته. منحنی یادگیری بسیار کوتاه است. +
+ +
+💎 مزیت رقابتی کلیدی: این ابزار تنها راه‌حلی است که تمامی نیازمندی‌های یک ابزار حرفه‌ای UML را در یک بسته سبک، رایگان، آفلاین و کاملاً فارسی ارائه می‌دهد. هیچ ابزار دیگری در بازار چنین ترکیبی از ویژگی‌ها را فراهم نمی‌آورد. +
+
+
+ +
+
+
۳
+
+

ارزش‌های خلق‌شده در سازمان

+
Organizational Value Creation
+
+
+
+

استفاده از این ابزار در سطح سازمان، ارزش‌های استراتژیک و عملیاتی متعددی ایجاد می‌کند که در سه دسته اصلی قابل دسته‌بندی هستند:

+ +
+
+
💰
+

صرفه‌جویی مالی

+

حذف هزینه‌های لایسنس، کاهش هزینه‌های آموزشی، کاهش زمان مدل‌سازی و افزایش بهره‌وری تیم

+
+
+
⚡
+

افزایش چابکی

+

سرعت بخشیدن به فرآیند طراحی، امکان مدل‌سازی سریع در جلسات، و کاهش زمان تبدیل ایده به مستند

+
+
+
🎯
+

بهبود کیفیت

+

استانداردسازی نمودارها، کاهش خطاهای طراحی، و افزایش دقت در انتقال مفاهیم بین تیم‌ها

+
+
+
🔒
+

امنیت داده‌ها

+

حفظ کامل حریم داده‌های معماری، عدم وابستگی به سرورهای خارجی، و کنترل کامل بر اطلاعات حساس

+
+
+
🤝
+

بهبود ارتباطات

+

زبان بصری مشترک بین تیم‌های فنی و کسب‌وکار، کاهش سوءتفاهم‌ها، و افزایش شفافیت در مستندات

+
+
+
📚
+

دانش سازمانی

+

ایجاد مخزن استاندارد از نمودارها، تسهیل Onboarding نیروهای جدید، و حفظ دانش معماری

+
+
+
🌐
+

استقلال فناورانه

+

عدم وابستگی به ابزارهای خارجی، قابلیت اجرا در هر محیطی، و سازگاری با محدودیت‌های شبکه

+
+
+
🚀
+

توسعه‌پذیری

+

معماری ماژولار امکان افزودن نمودارهای جدید، سفارشی‌سازی و یکپارچه‌سازی با ابزارهای دیگر را فراهم می‌آورد

+
+
+
📊
+

حرفه‌ای‌گری

+

ارتقای سطح بلوغ مهندسی سازمان، استانداردسازی فرآیندهای طراحی، و افزایش اعتبار مستندات فنی

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
دسته ارزششاخص کلیدیتأثیر مورد انتظار
مالیکاهش هزینه‌های ابزارحذف ۱۰۰٪ هزینه لایسنس
عملیاتیزمان مدل‌سازیکاهش ۴۰-۶۰٪ زمان
کیفیدقت مستنداتافزایش چشمگیر
امنیتیحفظ حریم داده‌هاتضمین کامل
آموزشیزمان یادگیریکاهش ۷۰٪ منحنی یادگیری
استراتژیکبلوغ مهندسی سازمانارتقای سطح بلوغ
+ +
+💡 نکته کلیدی: ارزش اصلی این ابزار در ترکیب منحصر‌به‌فرد «رایگان + آفلاین + فارسی + جامع» است. این ترکیب در هیچ ابزار دیگری در بازار یافت نمی‌شود و برای سازمان‌های ایرانی یک مزیت رقابتی پایدار ایجاد می‌کند. +
+
+
+ +
+
+
۴
+
+

معماری دقیق فنی پروژه

+
Technical Architecture Deep Dive
+
+
+
+

معماری این پروژه بر پایه اصول مهندسی نرم‌افزار مدرن، الگوهای طراحی اثبات‌شده و رویکرد State-Centric طراحی شده است. در ادامه، لایه‌های مختلف معماری و اجزای کلیدی آن تشریح می‌گردد.

+ +
+

🎨 لایه ۱: رابط کاربری (UI Layer)

+

این لایه مسئول ارائه تجربه کاربری حرفه‌ای و تعامل با کاربر است. شامل Sidebar ابزارها، Tab Bar برای مدیریت چند نمودار، Properties Panel برای ویرایش ویژگی‌ها، و Modal‌های مختلف (ایجاد نمودار، تنظیمات، ذخیره، Export PNG و ویرایشگر Class) می‌باشد.

+
    +
  • تکنولوژی: HTML5 Semantic + CSS3 (با CSS Variables برای تم داینامیک) + Tailwind CSS (CDN)
  • +
  • ویژگی کلیدی: پشتیبانی کامل RTL، فونت Vazirmatn، تم تاریک/روشن، طراحی Responsive
  • +
+
+ +
+

🧠 لایه ۲: مدیریت وضعیت (State Management Layer)

+

قلب تپنده برنامه که تمامی وضعیت‌های سراسری را در یک آبجکت مرکزی نگهداری می‌کند. این رویکرد باعث سادگی، قابلیت پیش‌بینی و نگهداری آسان کد می‌شود.

+
+const state = {
+  diagrams: [],                  // لیست همه نمودارها
+  activeDiagramId: null,         // شناسه نمودار فعال
+  currentTool: 'select',         // ابزار انتخاب‌شده
+  selectedElement: null,         // المان انتخاب‌شده
+  isDragging: false,             // وضعیت Drag
+  isDrawingRelationship: false,  // وضعیت رسم رابطه
+  mousePos: { x:0, y:0 },        // موقعیت ماوس
+  sidebarVisible: true,         // وضعیت Sidebar
+  gridType: 'lines',            // نوع خط‌کشی بوم
+  darkMode: true,               // تم تاریک/روشن
+  fileMetadata: { ... }          // متادیتای پروژه
+  // ... سایر ویژگی‌های وضعیت
+}; +
+
+ +
+

🎨 لایه ۳: موتور رسم (Rendering Engine)

+

موتور رسم بر پایه HTML5 Canvas 2D API و رویکرد Immediate Mode Rendering طراحی شده است. در این رویکرد، در هر تغییر وضعیت، کل بوم پاک‌سازی شده و تمامی المان‌ها از نو رسم می‌شوند.

+
    +
  • تابع اصلی رسم: function draw() { ... } - چرخه اصلی رسم که Grid، المان‌ها و روابط را مدیریت می‌کند
  • +
  • تابع Dispatch: function drawDiag(c,d,tc) { ... } - بر اساس نوع نمودار، تابع اختصاصی را فراخوانی می‌کند
  • +
  • توابع اختصاصی هر نمودار: +
      +
    • function drawUseCase(c,d,tc) { ... }
    • +
    • function drawStateMachine(c,d,tc) { ... }
    • +
    • function drawActivity(c,d,tc) { ... }
    • +
    • function drawComponent(c,d,tc) { ... }
    • +
    • function drawDeployment(c,d,tc) { ... }
    • +
    • function drawClassDiagram(c,d,tc) { ... }
    • +
    • function drawSequenceDiagram(c,d,tc) { ... }
    • +
    • function drawSwimlaneDiagram(c,d,tc) { ... }
    • +
    +
  • +
  • تابع رسم Grid: function drawGrid(c,w,h,tc,trans) { ... } - پشتیبانی از سه حالت Lines, Dots, None
  • +
+
+ +
+

🎯 لایه ۴: سیستم تعامل و Hit Testing

+

این لایه مسئول تشخیص موقعیت ماوس، انتخاب المان‌ها، Drag & Drop و رسم روابط است.

+
    +
  • تابع Hit Test: function hitTest(x,y) { ... } - بر اساس نوع نمودار، الگوریتم‌های متفاوتی برای تشخیص المان زیر ماوس اجرا می‌کند
  • +
  • مدیریت رویدادها: +
      +
    • canvas.addEventListener('mousedown', e => { ... }) - شروع Drag یا رسم رابطه
    • +
    • canvas.addEventListener('mousemove', e => { ... }) - به‌روزرسانی موقعیت المان‌ها
    • +
    • canvas.addEventListener('mouseup', e => { ... }) - پایان Drag یا تکمیل رابطه
    • +
    • canvas.addEventListener('dblclick', e => { ... }) - باز کردن ویرایشگرها
    • +
    +
  • +
+
+ +
+

🗂️ لایه ۵: رجیستری نمودارها (Diagram Registry)

+

الگوی طراحی Registry Pattern برای تعریف مرکزی انواع نمودارها و قابلیت‌های آن‌ها به‌کار رفته است.

+
+const DIAGRAM_TYPES = {
+  usecase: {
+    id: 'usecase',
+    name: 'نمودار مورد کاربرد (Use Case)',
+    icon: '⭕',
+    available: true,
+    tools: ['select', 'actor', 'useCase', ...],
+    groups: ['selection', 'uc-elements', ...]
+  },
+  statemachine: { /* ... */ },
+  activity: { /* ... */ },
+  component: { /* ... */ },
+  deployment: { /* ... */ },
+  class: { /* ... */ },
+  sequence: { /* ... */ },
+  swimlane: { /* ... */ }
+}; +
+

این رجیستری به‌عنوان Single Source of Truth برای ابزارها، گروه‌ها و قابلیت‌های هر نمودار عمل می‌کند و افزودن نمودار جدید را بسیار آسان می‌سازد.

+
+ +
+

💾 لایه ۶: سیستم Persistence

+

سیستم ذخیره‌سازی و بازیابی مبتنی بر JSON File API است. این رویکرد مزایای متعددی نسبت به LocalStorage یا Backend دارد.

+
    +
  • تابع ساخت داده ذخیره: function buildSaveData() { ... } - ساختار کامل JSON شامل متادیتا، ترجیحات و همه نمودارها
  • +
  • تابع ذخیره: document.getElementById('confirmSaveBtn').addEventListener('click', () => { ... }) - ایجاد Blob و دانلود فایل
  • +
  • تابع بارگذاری: document.getElementById('fileInput').addEventListener('change', e => { ... }) - خواندن فایل JSON و بازیابی وضعیت
  • +
+
+ +
+

🎨 لایه ۷: سیستم تم و رنگ

+

سیستم تم بر پایه CSS Custom Properties (Variables) طراحی شده است. با تغییر کلاس body.dark، تمامی متغیرهای رنگی به‌صورت آنی تغییر می‌کنند.

+
    +
  • تابع دریافت رنگ‌ها: function getTC() { ... } - استخراج رنگ‌های فعال از CSS Variables در زمان اجرا
  • +
  • تابع اعمال تم: function applyTheme() { ... } - تغییر کلاس body و به‌روزرسانی UI
  • +
+
+ +
+

🔧 لایه ۸: مدیریت نمودارها

+

توابع مدیریت چرخه حیات نمودارها (ایجاد، سوئیچ، حذف) در این لایه قرار دارند.

+
    +
  • function createNewDiagram(type='usecase') { ... }
  • +
  • function switchDiagram(id) { ... }
  • +
  • function deleteDiagram(id) { ... }
  • +
  • function renderTabs() { ... } - رسم Tab Bar
  • +
  • function updateToolVisibility() { ... } - نمایش/مخفی کردن ابزارها بر اساس نوع نمودار فعال
  • +
+
+ +
+

🗂️ لایه ۹: ویرایشگرهای تخصصی

+

برای المان‌های پیچیده مانند Class، ویرایشگرهای اختصاصی طراحی شده‌اند.

+
    +
  • function openClassEditor(classId) { ... } - باز کردن ویرایشگر Class با Attributes و Methods
  • +
  • function renderAttributesTable() { ... } - رسم جدول ویژگی‌ها
  • +
  • function renderMethodsTable() { ... } - رسم جدول متدها
  • +
+
+ +

الگوهای طراحی به‌کار رفته:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
الگومحل کاربردمزیت
Registry PatternDIAGRAM_TYPESمرجع مرکزی، توسعه‌پذیری آسان
State Patternآبجکت stateمدیریت متمرکز وضعیت
Strategy Patternتوابع draw*انتخاب استراتژی رسم بر اساس نوع
Command Patternمدیریت ابزارهارفتارهای مشخص برای هر ابزار
Observer PatternEvent Listenersواکنش به رویدادهای کاربر
Factory PatterncreateNewDiagram()ساخت ساختار اولیه نمودار
Singleton PatternCanvas Context، Stateتنها یک نمونه از منابع حیاتی
+ +
+💡 نکته معماری: انتخاب Vanilla JS به جای فریم‌ورک‌هایی مانند React یا Angular، باعث کاهش چشمگیر حجم نهایی، اجرای سریع‌تر، عدم وابستگی به ابزارهای Build و سادگی نگهداری شده است. این رویکرد برای ابزارهای تخصصی و آفلاین، انتخاب بهینه‌ای است. +
+
+
+ +
+
+
۵
+
+

مخاطبان هدف: سازمان‌ها و تیم‌ها

+
Target Audience: Organizations & Teams
+
+
+
+

این ابزار برای طیف گسترده‌ای از سازمان‌ها و تیم‌های نرم‌افزاری طراحی شده است. در ادامه، مخاطبان هدف و موارد استفاده مناسب برای هر دسته تشریح می‌گردد.

+ +

الف) سازمان‌های مناسب:

+ +
+
+
🏢
+

شرکت‌های نرم‌افزاری

+

تیم‌های توسعه که نیاز به مدل‌سازی معماری، طراحی کلاس‌ها و مستندسازی سیستم‌ها دارند. مناسب برای شرکت‌های محصول‌محور و پروژه‌ای.

+
+
+
🚀
+

استارتاپ‌ها

+

تیم‌های کوچک که به ابزار سبک، رایگان و سریع نیاز دارند. مناسب برای MVP، طراحی اولیه و ارائه به سرمایه‌گذاران.

+
+
+
🏛️
+

سازمان‌های دولتی و نظامی

+

سازمان‌هایی که به دلیل محدودیت‌های امنیتی، نمی‌توانند از ابزارهای ابری استفاده کنند و نیاز به راه‌حل کاملاً آفلاین دارند.

+
+
+
🏦
+

بانک‌ها و مؤسسات مالی

+

سازمان‌هایی با الزامات امنیتی بالا که نیاز به حفظ کامل حریم داده‌های معماری حساس خود دارند.

+
+
+
🎓
+

دانشگاه‌ها و مراکز آموزشی

+

اساتید و دانشجویان رشته‌های مهندسی نرم‌افزار، علوم کامپیوتر و IT برای تدریس و یادگیری UML.

+
+
+
🏥
+

سازمان‌های بهداشتی و درمانی

+

تیم‌های فنی که نیاز به مدل‌سازی فرآیندهای پیچیده کسب‌وکار و سیستم‌های اطلاعاتی دارند.

+
+
+
🏭
+

شرکت‌های صنعتی و تولیدی

+

تیم‌های IT که نیاز به مدل‌سازی سیستم‌های ERP، CRM و فرآیندهای تولید دارند.

+
+
+
🌐
+

شرکت‌های مشاوره و پیمانکاری

+

مشاورانی که نیاز به ارائه مستندات حرفه‌ای به کارفرمایان مختلف دارند و می‌خواهند ابزار یکپارچه‌ای داشته باشند.

+
+
+ +

ب) تیم‌های مناسب:

+ +
+
+
👨‍💼
+

معماران نرم‌افزار

+

برای طراحی معماری کلان، مدل‌سازی کامپوننت‌ها، استقرار و ارتباط بین لایه‌های مختلف سیستم.

+
+
+
📊
+

تحلیل‌گران کسب‌وکار (BA)

+

برای مدل‌سازی نیازمندی‌ها، فرآیندهای کسب‌وکار، Use Caseها و Swimlaneها.

+
+
+
💻
+

توسعه‌دهندگان Backend

+

برای طراحی Class Diagram، Sequence Diagram و State Machine برای پیاده‌سازی دقیق.

+
+
+
🎨
+

توسعه‌دهندگان Frontend

+

برای مدل‌سازی Componentها، تعاملات UI و ارتباط بین کامپوننت‌ها.

+
+
+
🧪
+

تیم‌های QA و تست

+

برای مدل‌سازی سناریوهای تست، فرآیندهای کسب‌وکار و درک بهتر سیستم.

+
+
+
📋
+

مدیران پروژه (PM)

+

برای مستندسازی معماری، ارتباط با ذینفعان و ارائه گزارش‌های بصری.

+
+
+
🎯
+

Product Owners

+

برای مدل‌سازی نیازمندی‌ها، Use Caseها و ارتباط با تیم فنی.

+
+
+
🔧
+

تیم‌های DevOps

+

برای مدل‌سازی Deployment Diagram، معماری زیرساخت و ارتباط بین سرویس‌ها.

+
+
+ +

ج) موارد استفاده مناسب:

+ +
    +
  • 📐 طراحی معماری سیستم: مدل‌سازی معماری کلان، میکروسرویس‌ها، و ارتباط بین کامپوننت‌ها
  • +
  • 📋 مستندسازی نیازمندی‌ها: رسم Use Case Diagram برای انتقال نیازمندی‌ها به تیم فنی
  • +
  • 🔄 مدل‌سازی فرآیندها: رسم Activity و Swimlane Diagram برای فرآیندهای کسب‌وکار
  • +
  • 🗂️ طراحی شیءگرا: رسم Class Diagram برای طراحی کلاس‌ها و روابط آن‌ها
  • +
  • ⏱️ مدل‌سازی تعاملات: رسم Sequence Diagram برای سناریوهای اجرایی
  • +
  • 🔁 مدل‌سازی چرخه حیات: رسم State Machine Diagram برای موجودیت‌های با وضعیت‌های گسسته
  • +
  • 🖥️ مستندسازی زیرساخت: رسم Deployment Diagram برای معماری فیزیکی
  • +
  • 🎓 آموزش و یادگیری: تدریس مفاهیم UML و مدل‌سازی نرم‌افزار
  • +
  • 📊 ارائه به ذینفعان: ایجاد نمودارهای حرفه‌ای برای جلسات و گزارش‌ها
  • +
  • 🔍 تحلیل و دیباگ: مدل‌سازی سناریوها برای درک بهتر رفتار سیستم
  • +
+ +
+💎 نتیجه‌گیری: این ابزار برای هر سازمان یا تیمی که نیاز به مدل‌سازی بصری سیستم‌های نرم‌افزاری دارد، مناسب است. به‌ویژه برای سازمان‌های ایرانی که به پشتیبانی کامل فارسی، محیط آفلاین و امنیت داده‌ها نیاز دارند، این ابزار یک انتخاب ایده‌آل است. +
+
+
+ +
+
+
۶
+
+

جمع‌بندی نهایی و پیشنهاد

+
Final Summary & Recommendation
+
+
+
+

«ابزار رسم نمودارهای UML» پاسخی جامع و حرفه‌ای به چالش‌های موجود در حوزه مدل‌سازی نرم‌افزار است. این ابزار با ترکیب منحصر‌به‌فرد «رایگان + آفلاین + فارسی + جامع»، ارزش‌های استراتژیک و عملیاتی متعددی برای سازمان‌ها ایجاد می‌کند.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
شاخصابزارهای تجاریابزارهای ابریاین ابزار
هزینهبسیار بالااشتراک ماهیانهکاملاً رایگان
نیاز به اینترنتاختیاریالزامیکاملاً آفلاین
امنیت داده‌هامتوسطریسک بالاتضمین کامل
پشتیبانی فارسیمحدودضعیفکامل و حرفه‌ای
تعداد نمودارها۸+ نمودار۴-۶ نمودار۸ نمودار کامل
حجم و نصبچند GB + نصببدون نصب<1 MB بدون نصب
ارزش کلی——بسیار بالاتر
+ +
+

🎯 پیشنهاد نهایی

+

با توجه به تحلیل جامع نیازمندی‌ها، مزایا، ارزش‌های سازمانی و معماری فنی، استفاده از این ابزار برای تمامی سازمان‌ها و تیم‌های نرم‌افزاری که به مدل‌سازی UML نیاز دارند، قویاً توصیه می‌شود.

+

این ابزار نه تنها هزینه‌ها را به شکل قابل‌توجهی کاهش می‌دهد، بلکه کیفیت مستندات، سرعت طراحی و امنیت داده‌ها را به‌طور هم‌زمان ارتقا می‌بخشد.

+
+💎 ارزش پیشنهادی:
+ابزاری کاملاً رایگان، آفلاین، فارسی و جامع که تمامی نیازمندی‌های مدل‌سازی UML را در یک بسته سبک و حرفه‌ای ارائه می‌دهد. +
+
+ +
+📞 گام بعدی: برای شروع استفاده، کافی است فایل HTML ابزار را دانلود کرده و در مرورگر باز کنید. هیچ نصب یا پیکربندی نیاز نیست. مستندات آموزشی کامل نیز برای یادگیری سریع در دسترس است. +
+
+
+ +
+این مستند جهت معرفی و تحلیل ابزار رسم نمودارهای UML تهیه شده است. استفاده از این ابزار برای تمامی سازمان‌ها و تیم‌های نرم‌افزاری آزاد و رایگان است. +
+
+ +
+ + \ No newline at end of file diff --git a/Documents/Resources/Tools/Document/xUMLDrawer_Case_Study.pdf b/Documents/Resources/Tools/Document/xUMLDrawer_Case_Study.pdf new file mode 100644 index 0000000..d447096 Binary files /dev/null and b/Documents/Resources/Tools/Document/xUMLDrawer_Case_Study.pdf differ diff --git a/Documents/Resources/Tools/Document/xUMLDrawer_Supported_UML_Diagrams_Tutorial.html b/Documents/Resources/Tools/Document/xUMLDrawer_Supported_UML_Diagrams_Tutorial.html new file mode 100644 index 0000000..3e4ee25 --- /dev/null +++ b/Documents/Resources/Tools/Document/xUMLDrawer_Supported_UML_Diagrams_Tutorial.html @@ -0,0 +1,1204 @@ + + + + + +مستند آموزشی جامع نمودارهای UML | راهنمای کامل با مثال‌های عملی + + + +
+
+
+
+ +
+
+
شماره مستند: UML-EDU-1405-001
+
نسخه: .۰
+
تاریخ تهیه: ۱۶ شهریور ۱۴۰۵ — ساعت ۱۰:۳۰
+
طبقه‌بندی: آموزشی / عمومی
+
+
+
+EDUCATIONAL DOCUMENTATION +

مستند آموزشی جامع نمودارهای UML

+

راهنمای کامل با مثال‌های عملی و کاربردی

+
+
+
+
+همکاران گرامی و علاقه‌مندان به مهندسی نرم‌افزار،
+این مستند آموزشی به‌عنوان مرجعی جامع برای یادگیری و درک عمیق هشت نمودار اصلی UML (Unified Modeling Language) تهیه شده است. هر فصل به تفصیل یک نوع نمودار را با ذکر المان‌ها، روابط، کاربردها و مثال‌های عملی توضیح می‌دهد. هدف از این مستند، ارائه درکی کاربردی و آماده‌سازی شما برای مدل‌سازی حرفه‌ای سیستم‌های نرم‌افزاری است. +
+ + + +
+
+
۱
+
+

نمودار مورد کاربرد (Use Case Diagram)

+
نمایش تعامل کاربران با سیستم
+
+
+
+

نمودار Use Case یکی از پرکاربردترین نمودارهای UML است که برای نمایش تعامل بین کاربران (Actors) و سیستم استفاده می‌شود. این نمودار دیدگاهی بیرونی از سیستم ارائه داده و نیازمندی‌های عملکردی را بدون ورود به جزئیات فنی نشان می‌دهد.

+ +
+
+
👤
+

Actor (بازیگر)

+

نماینده کاربر، سیستم خارجی یا موجودیتی که با سیستم تعامل دارد. به صورت شکل انسان نمایش داده می‌شود.

+
+
+
⭕
+

Use Case (مورد کاربرد)

+

یک عملکرد یا سرویس خاص که سیستم ارائه می‌دهد. به صورت بیضی نمایش داده می‌شود.

+
+
+
+

System Boundary (مرز سیستم)

+

مستطیلی که محدوده سیستم را مشخص کرده و Use Caseها درون آن قرار می‌گیرند.

+
+
+
➖
+

Association (ارتباط)

+

خط ساده که Actor را به Use Case مرتبط وصل می‌کند.

+
+
+ +

انواع روابط در Use Case:

+
    +
  • Include (شامل): رابطه‌ای که نشان می‌دهد یک Use Case حتماً شامل Use Case دیگری است. با خط‌چین و stereotype <<include>> نمایش داده می‌شود.
  • +
  • 🔀 Extend (گسترش): رابطه‌ای اختیاری که نشان می‌دهد یک Use Case می‌تواند در شرایط خاصی Use Case دیگر را گسترش دهد. با خط‌چین و stereotype <<extend>> نمایش داده می‌شود.
  • +
  • 🔺 Generalization (تعمیم): رابطه ارث‌بری بین Actors یا بین Use Cases. با فلش مثلثی توخالی نمایش داده می‌شود.
  • +
+ +
+

مثال عملی: سیستم بانکداری آنلاین

+

Actors: مشتری، کارمند بانک، مدیر سیستم

+

Use Cases:

+
    +
  • مشتری → ورود به سیستم، مشاهده موجودی، انتقال وجه، پرداخت قبض
  • +
  • کارمند بانک → ثبت مشتری جدید، تأیید تراکنش‌های بزرگ
  • +
  • مدیر سیستم → مدیریت کاربران، مشاهده گزارش‌ها
  • +
  • «انتقال وجه» <<include>> «بررسی موجودی»
  • +
  • «ورود به سیستم» <<extend>> «احراز هویت دو مرحله‌ای» (در صورت فعال بودن)
  • +
+
+ +
+💡 نکته کلیدی: نمودار Use Case در فاز تحلیل نیازمندی‌ها استفاده شده و به درک مشترک بین تیم فنی و ذینفعان کسب‌وکار کمک می‌کند. +
+
+
+ +
+
+
۲
+
+

نمودار فعالیت (Activity Diagram)

+
مدل‌سازی جریان کار و فرآیندها
+
+
+
+

نمودار Activity برای نمایش جریان کار (Workflow)، فرآیندهای کسب‌وکار و الگوریتم‌ها استفاده می‌شود. این نمودار شبیه فلوچارت است اما قدرت بیشتری در نمایش فعالیت‌های موازی و تصمیم‌گیری‌های پیچیده دارد.

+ +
+
+
⚫
+

Initial Node (گره شروع)

+

دایره توپر سیاه که نقطه شروع فرآیند را نشان می‌دهد.

+
+
+
🎯
+

Final Node (گره پایان)

+

دایره توپر با حاشیه ضخیم که پایان فرآیند را نشان می‌دهد.

+
+
+
▭
+

Action (فعالیت)

+

مستطیل با گوشه‌های گرد که یک عملیات یا کار را نشان می‌دهد.

+
+
+
◇
+

Decision/Merge (تصمیم/ادغام)

+

لوزی که برای انشعاب شرطی یا ادغام جریان‌ها استفاده می‌شود.

+
+
+
▬
+

Fork/Join (انشعاب/هم‌زمانی)

+

خط ضخیم افقی یا عمودی برای نمایش فعالیت‌های موازی.

+
+
+
→
+

Control Flow (جریان کنترل)

+

فلش که ترتیب اجرای فعالیت‌ها را نشان می‌دهد.

+
+
+ +
+

📋 مثال عملی: فرآیند ثبت سفارش آنلاین

+

جریان فرآیند:

+
    +
  • شروع: مشتری وارد سایت می‌شود
  • +
  • فعالیت‌ها: انتخاب محصول → افزودن به سبد خرید → ورود/ثبت‌نام → انتخاب آدرس → انتخاب روش پرداخت
  • +
  • Decision: آیا موجودی کافی است؟ (بله/خیر)
  • +
  • Fork: هم‌زمان: ۱) کاهش موجودی انبار ۲) ارسال ایمیل تأیید
  • +
  • Join: انتظار برای تکمیل هر دو فعالیت موازی
  • +
  • پایان: ثبت نهایی سفارش
  • +
+
+ +
+کاربردهای کلیدی: مدل‌سازی فرآیندهای کسب‌وکار، الگوریتم‌های پیچیده، گردش کار (Workflow)، و تحلیل سناریوهای مختلف +
+
+
+ +
+
+
۳
+
+

نمودار ماشین حالت (State Machine Diagram)

+
نمایش چرخه حیات و تغییر وضعیت‌ها
+
+
+
+

نمودار State Machine برای نمایش وضعیت‌های مختلف یک شیء و رویدادهایی که باعث تغییر وضعیت می‌شوند استفاده می‌شود. این نمودار برای مدل‌سازی چرخه حیات (Lifecycle) موجودیت‌ها ایده‌آل است.

+ +
+
+
⚫
+

Initial State (وضعیت شروع)

+

دایره توپر کوچک که وضعیت اولیه را نشان می‌دهد.

+
+
+
+

Final State (وضعیت پایانی)

+

دایره توپر با حاشیه ضخیم که وضعیت نهایی را نشان می‌دهد.

+
+
+
🔲
+

State (وضعیت)

+

مستطیل با گوشه‌های گرد که یک وضعیت خاص را نشان می‌دهد.

+
+
+
️
+

Transition (گذار)

+

فلش که تغییر از یک وضعیت به وضعیت دیگر را نشان می‌دهد. می‌تواند برچسب (رویداد/شرط/اقدام) داشته باشد.

+
+
+ +

ساختار Transition:

+
+فرمت: eventName [guardCondition] / action
+مثال: pay [amount > 0] / updateInventory() +
+ +
+

مثال عملی: چرخه حیات سفارش

+

وضعیت‌ها:

+
    +
  • ایجاد شده (Created)
  • +
  • در انتظار پرداخت (Pending Payment)
  • +
  • پرداخت شده (Paid)
  • +
  • در حال پردازش (Processing)
  • +
  • ارسال شده (Shipped)
  • +
  • تحویل داده شده (Delivered)
  • +
  • لغو شده (Cancelled)
  • +
+

گذارها:

+
    +
  • Created → Pending Payment: رویداد «ثبت سفارش»
  • +
  • Pending Payment → Paid: رویداد «پرداخت موفق»
  • +
  • Paid → Processing: رویداد «تأیید پرداخت»
  • +
  • Processing → Shipped: رویداد «ارسال کالا»
  • +
  • Shipped → Delivered: رویداد «تحویل به مشتری»
  • +
  • هر وضعیت → Cancelled: رویداد «لغو» (با شرایط خاص)
  • +
+
+ +
+⚠️ نکته مهم: State Machine برای اشیایی استفاده می‌شود که چرخه حیات مشخص و وضعیت‌های گسسته دارند. برای فرآیندهای پیچیده با فعالیت‌های موازی، از Activity Diagram استفاده کنید. +
+
+
+ +
+
+
۴
+
+

نمودار کامپوننت (Component Diagram)

+
نمایش ساختار ماژولار و وابستگی‌ها
+
+
+
+

نمودار Component برای نمایش ساختار فیزیکی سیستم، ماژول‌ها، کتابخانه‌ها و وابستگی‌های بین آن‌ها استفاده می‌شود. این نمودار دیدگاهی از معماری نرم‌افزار در سطح کامپوننت ارائه می‌دهد.

+ +
+
+
🧩
+

Component (کامپوننت)

+

مستطیل با آیکون کامپوننت (دو مستطیل کوچک در گوشه) که یک ماژول یا جزء سیستم را نشان می‌دهد.

+
+
+
🍭
+

Interface Provided (اینترفیس ارائه‌شده)

+

دایره (Lollipop) که سرویس‌هایی که کامپوننت ارائه می‌دهد را نشان می‌دهد.

+
+
+
◗
+

Interface Required (اینترفیس مورد نیاز)

+

نیم‌دایره (Socket) که سرویس‌هایی که کامپوننت نیاز دارد را نشان می‌دهد.

+
+
+
📁
+

Package (بسته)

+

پوشه‌ای که کامپوننت‌های مرتبط را گروه‌بندی می‌کند.

+
+
+
⇢
+

Dependency (وابستگی)

+

فلش خط‌چین که وابستگی بین کامپوننت‌ها را نشان می‌دهد.

+
+
+
—
+

Connector (اتصال)

+

خط جامد که اتصال بین Interface Provided و Required را نشان می‌دهد.

+
+
+ +
+

📋 مثال عملی: سیستم مدیریت محتوا (CMS)

+

کامپوننت‌ها:

+
    +
  • User Management: مدیریت کاربران و احراز هویت
  • +
  • Content Engine: مدیریت محتوا و ویرایشگر
  • +
  • Media Library: مدیریت فایل‌های چندرسانه‌ای
  • +
  • Search Module: موتور جستجو
  • +
  • Notification Service: ارسال اعلان‌ها
  • +
+

وابستگی‌ها:

+
    +
  • Content Engine → User Management (برای بررسی مجوزها)
  • +
  • Search Module → Content Engine (برای ایندکس محتوا)
  • +
  • Notification Service → User Management (برای دریافت اطلاعات کاربران)
  • +
+

اینترفیس‌ها:

+
    +
  • User Management: IAuthentication, IUserProfile
  • +
  • Content Engine: IContentCRUD, IVersioning
  • +
+
+ +
+✓ مزایا: درک معماری سیستم، مدیریت وابستگی‌ها، برنامه‌ریزی برای ماژولاریزاسیون، و تسهیل توسعه موازی تیم‌ها +
+
+
+ +
+
+
۵
+
+

نمودار استقرار (Deployment Diagram)

+
نمایش معماری فیزیکی و توزیع نرم‌افزار
+
+
+
+

نمودار Deployment برای نمایش سخت‌افزارها، نودها، محیط‌های اجرا و نحوه استقرار نرم‌افزار بر روی زیرساخت فیزیکی استفاده می‌شود. این نمودار دیدگاهی از معماری فیزیکی سیستم ارائه می‌دهد.

+ +
+
+
🖥️
+

Node (گره)

+

مکعب سه‌بعدی که یک سخت‌افزار یا محیط اجرا (مانند سرور، کامپیوتر، کانتینر) را نشان می‌دهد.

+
+
+
💻
+

Device (دستگاه)

+

نود فیزیکی مانند سرور، روتر، یا دستگاه موبایل.

+
+
+
⚙️
+

Execution Environment (محیط اجرا)

+

نود نرم‌افزاری مانند OS، JVM، Docker، یا Kubernetes.

+
+
+
📄
+

Artifact (مصنوع)

+

فایل‌های اجرایی، کتابخانه‌ها، پایگاه داده، یا فایل‌های پیکربندی که بر روی نودها استقرار می‌یابند.

+
+
+
⇌
+

Communication Path (مسیر ارتباطی)

+

خط جامد که ارتباط فیزیکی بین نودها را نشان می‌دهد.

+
+
+
⇣
+

Deployment Relationship (رابطه استقرار)

+

فلش خط‌چین که استقرار Artifact بر روی Node را نشان می‌دهد.

+
+
+ +
+

📋 مثال عملی: سیستم وب اپلیکیشن میکروسرویس

+

نودها:

+
    +
  • Load Balancer: Nginx (Device)
  • +
  • Application Servers: Kubernetes Cluster (Execution Environment) +
      +
    • User Service Pod
    • +
    • Order Service Pod
    • +
    • Payment Service Pod
    • +
    +
  • +
  • Database Server: PostgreSQL Cluster (Device)
  • +
  • Cache Server: Redis Cluster (Device)
  • +
  • Message Broker: RabbitMQ Server (Device)
  • +
+

Artifacts:

+
    +
  • User Service → user-service.jar
  • +
  • Order Service → order-service.jar
  • +
  • Database → schema.sql, data.migration
  • +
+

ارتباطات:

+
    +
  • Load Balancer ⇌ Application Servers (HTTP/HTTPS)
  • +
  • Application Servers Database Server (JDBC)
  • +
  • Application Servers ⇌ Cache Server (Redis Protocol)
  • +
  • Application Servers ⇌ Message Broker (AMQP)
  • +
+
+ +
+💡 کاربرد: برنامه‌ریزی زیرساخت، مستندسازی محیط‌های Development/Staging/Production، و تحلیل Performance و Scalability +
+
+
+ +
+
+
۶
+
+

نمودار کلاس (Class Diagram)

+
نمایش ساختار ایستایی و روابط بین کلاس‌ها
+
+
+
+

نمودار Class مهم‌ترین و پرکاربردترین نمودار UML است که ساختار ایستایی (Static Structure) سیستم را نشان می‌دهد. این نمودار کلاس‌ها، ویژگی‌ها، متدها و روابط بین آن‌ها را مدل‌سازی می‌کند.

+ +
+
+
🗂️
+

Class (کلاس)

+

مستطیل سه‌بخشی: ۱) نام کلاس ۲) Attributes (ویژگی‌ها) ۳) Methods (متدها)

+
+
+
◯
+

Interface (اینترفیس)

+

دایره یا مستطیل با stereotype <<interface>> که قراردادها را تعریف می‌کند.

+
+
+
🗂️
+

Abstract Class (کلاس انتزاعی)

+

کلاس با نام ایتالیک که نمی‌توان نمونه مستقیم از آن ساخت.

+
+
+
➖
+

Association (ارتباط)

+

خط جامد که ارتباط بین دو کلاس را نشان می‌دهد. می‌تواند Multiplicity (تعداد) داشته باشد.

+
+
+
◇
+

Aggregation (تجميع)

+

لوزی توخالی که رابطه «has-a» ضعیف را نشان می‌دهد (جزء می‌تواند مستقل وجود داشته باشد).

+
+
+
◆
+

Composition (ترکیب)

+

لوزی توپر که رابطه «has-a» قوی را نشان می‌دهد (جزء بدون کل نمی‌تواند وجود داشته باشد).

+
+
+
△
+

Inheritance (ارث‌بری)

+

فلش مثلثی توخالی که رابطه «is-a» یا Generalization را نشان می‌دهد.

+
+
+
⇢
+

Dependency (وابستگی)

+

فلش خط‌چین که استفاده موقت یک کلاس از کلاس دیگر را نشان می‌دهد.

+
+
+ +

Visibility (سطح دسترسی):

+
++ public | - private | # protected | ~ package +
+ +
+

📋 مثال عملی: سیستم مدیریت کتابخانه

+

کلاس‌ها:

+
    +
  • Book: +
      +
    • Attributes: -isbn: String, -title: String, -author: String, -isAvailable: Boolean
    • +
    • Methods: +borrow(), +return(), +reserve()
    • +
    +
  • +
  • Member: +
      +
    • Attributes: -memberId: String, -name: String, -email: String
    • +
    • Methods: +searchBook(), +borrowBook(), +returnBook()
    • +
    +
  • +
  • Loan: +
      +
    • Attributes: -loanId: String, -loanDate: Date, -dueDate: Date
    • +
    • Methods: +calculateFine(), +extendLoan()
    • +
    +
  • +
  • Librarian: (ارث‌بری از Member) +
      +
    • Methods: +addBook(), +removeBook(), +generateReport()
    • +
    +
  • +
+

روابط:

+
    +
  • Member «1» — «*» Loan (یک عضو می‌تواند چندین امانی داشته باشد)
  • +
  • Book «1» — «*» Loan (یک کتاب می‌تواند در چندین امانی باشد)
  • +
  • Loan ◆ Book (Composition: امانی بدون کتاب معنی ندارد)
  • +
  • Librarian △ Member (ارث‌بری)
  • +
  • Book Notification (وابستگی برای ارسال اعلان)
  • +
+
+ +
+ نکته طلایی: نمودار Class پایه و اساس طراحی شیءگرا است و مستقیماً به کد تبدیل می‌شود. طراحی دقیق این نمودار، کیفیت کد نهایی را تضمین می‌کند. +
+
+
+ +
+
+
۷
+
+

نمودار توالی (Sequence Diagram)

+
نمایش تعاملات زمانی بین اشیاء
+
+
+
+

نمودار Sequence برای نمایش تعاملات بین اشیاء در طول زمان استفاده می‌شود. این نمودار نشان می‌دهد که پیام‌ها به چه ترتیبی بین اشیاء مبادله می‌شوند و برای درک سناریوهای اجرایی ایده‌آل است.

+ +
+
+
▭
+

Participant/Lifeline (خط حیات)

+

مستطیل در بالا با خط‌چین عمودی که حضور یک شیء در طول زمان را نشان می‌دهد.

+
+
+
▮
+

Activation (فعال‌سازی)

+

مستطیل باریک روی Lifeline که مدت زمان اجرای یک متد را نشان می‌دهد.

+
+
+
→●
+

Synchronous Message (پیام هم‌زمان)

+

فلش جامد که فراخوانی متد را نشان می‌دهد (فرستنده منتظر پاسخ می‌ماند).

+
+
+
→○
+

Asynchronous Message (پیام ناهم‌زمان)

+

فلش خط‌چین که ارسال پیام بدون انتظار برای پاسخ را نشان می‌دهد.

+
+
+
⇠
+

Return Message (پیام بازگشت)

+

فلش خط‌چین که مقدار بازگشتی یا پایان اجرا را نشان می‌دهد.

+
+
+
↷
+

Self Message (پیام خودی)

+

فلش منحنی که فراخوانی متد روی خود شیء را نشان می‌دهد.

+
+
+
▣
+

Combined Fragment (قطعه ترکیبی)

+

مستطیل با برچسب (alt, opt, loop, break) برای نمایش ساختارهای کنترلی.

+
+
+ +

انواع Combined Fragments:

+
    +
  • alt (شرطی): معادل if-else (چندین گزینه با شرایط مختلف)
  • +
  • opt (اختیاری): معادل if (یک گزینه در صورت برقراری شرط)
  • +
  • loop (حلقه): معادل for/while (تکرار چندین بار)
  • +
  • break (شکست): معادل break (خروج از سناریو در صورت خطا)
  • +
+ +
+

📋 مثال عملی: فرآیند خرید آنلاین

+

Participants: Customer, ShoppingCart, PaymentGateway, Inventory, EmailService

+

ترتیب پیام‌ها:

+
    +
  1. Customer → ShoppingCart: addItem(product)
  2. +
  3. Customer → ShoppingCart: checkout()
  4. +
  5. ShoppingCart → Inventory: checkAvailability(product)
  6. +
  7. Inventory → ShoppingCart: return true
  8. +
  9. ShoppingCart → PaymentGateway: processPayment(amount)
  10. +
  11. alt [payment success]: +
      +
    • PaymentGateway → ShoppingCart: paymentConfirmed()
    • +
    • ShoppingCart → Inventory: reduceStock(product)
    • +
    • ShoppingCart → EmailService: sendConfirmation(customerEmail)
    • +
    • EmailService → Customer: send email
    • +
    +
  12. +
  13. else [payment failed]: +
      +
    • PaymentGateway → ShoppingCart: paymentFailed()
    • +
    • ShoppingCart → Customer: showError()
    • +
    +
  14. +
+
+ +
+✓ کاربرد: درک سناریوهای پیچیده، دیباگ کردن، مستندسازی APIها، و ارتباط بین تیم‌های Frontend و Backend +
+
+
+ +
+
+
۸
+
+

نمودار Swimlane

+
نمایش مسئولیت‌ها در فرآیندها
+
+
+
+

نمودار Swimlane (یا Activity Diagram با Swimlanes) نسخه پیشرفته‌ای از Activity Diagram است که فعالیت‌ها را بر اساس مسئولیت (Actor، Department، یا System) در Laneهای جداگانه سازماندهی می‌کند. این نمودار برای نمایش «چه کسی چه کاری انجام می‌دهد» عالی است.

+ +
+
+
▤
+

Swimlane (لاین شنا)

+

ناحیه افقی یا عمودی که تمام فعالیت‌های یک مسئول یا بخش را در خود جای می‌دهد.

+
+
+
▭
+

Action (فعالیت)

+

مستطیل با گوشه‌های گرد که یک کار را در Swimlane مربوطه نشان می‌دهد.

+
+
+
◇
+

Decision (تصمیم)

+

لوزی که می‌تواند بین Swimlane‌ها جریان ایجاد کند.

+
+
+
→
+

Cross-Lane Flow (جریان بین لاین‌ها)

+

فلش که انتقال کار از یک مسئول به مسئول دیگر را نشان می‌دهد.

+
+
+ +
+

📋 مثال عملی: فرآیند استخدام نیروی جدید

+

Swimlanes: متقاضی، منابع انسانی (HR)، مدیر فنی، مدیرعامل

+

جریان فرآیند:

+
    +
  • متقاضی: +
      +
    • ارسال رزومه → HR
    • +
    • شرکت در مصاحبه فنی
    • +
    • دریافت پیشنهاد کاری
    • +
    +
  • +
  • HR: +
      +
    • بررسی اولیه رزومه
    • +
    • هماهنگی مصاحبه → مدیر فنی
    • +
    • بررسی سوابق (Background Check)
    • +
    • ارسال پیشنهاد کاری (در صورت تأیید مدیرعامل)
    • +
    +
  • +
  • مدیر فنی: +
      +
    • مصاحبه فنی
    • +
    • ارزیابی مهارت‌ها
    • +
    • ارسال نتیجه → HR
    • +
    +
  • +
  • مدیرعامل: +
      +
    • تأیید نهایی استخدام (Decision)
    • +
    +
  • +
+

Decision Points:

+
    +
  • آیا رزومه مناسب است؟ (HR) → خیر: رد درخواست | بله: ادامه
  • +
  • آیا مصاحبه فنی موفق بود؟ (مدیر فنی) → خیر: رد درخواست | بله: ادامه
  • +
  • آیا مدیرعامل تأیید می‌کند؟ → خیر: رد درخواست | بله: ارسال پیشنهاد
  • +
+
+ +
+💡 مزیت کلیدی: Swimlane Diagram به وضوح نشان می‌دهد که هر Actor یا بخش چه مسئولیتی دارد و کجاها نیاز به هماهنگی و Handoff وجود دارد. این نمودار برای بهینه‌سازی فرآیندهای کسب‌وکار و شناسایی گلوگاه‌ها عالی است. +
+ +
+🎯 تفاوت با Activity Diagram ساده: Activity Diagram فقط «چه کاری» را نشان می‌دهد، اما Swimlane Diagram «چه کسی چه کاری» را مشخص می‌کند. +
+
+
+ +
+
+
۹
+
+

جمع‌بندی و نکات پایانی

+
انتخاب نمودار مناسب برای هر سناریو
+
+
+
+

هر یک از نمودارهای UML هدف خاصی دارند و در فازهای مختلف چرخه حیات توسعه نرم‌افزار استفاده می‌شوند:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
نمودارهدف اصلیفاز استفادهسطح
Use Caseنیازمندی‌ها و تعامل کاربرانتحلیلبالا (Business)
Activityفرآیندها و الگوریتم‌هاتحلیل/طراحیمتوسط
State Machineچرخه حیات اشیاءطراحیپایین (Technical)
Classساختار ایستایی سیستمطراحیپایین (Technical)
Sequenceتعاملات زمانی بین اشیاءطراحیپایین (Technical)
Componentمعماری ماژولارطراحی معماریبالا (Architecture)
Deploymentزیرساخت فیزیکیاستقراربالا (Infrastructure)
Swimlaneمسئولیت‌ها در فرآیندهاتحلیل کسب‌وکاربالا (Business)
+ +
+

🎯 توصیه‌های کلیدی

+

۱. از ساده شروع کنید: ابتدا Use Case و Activity Diagram برای درک نیازمندی‌ها

+

۲. سپس به جزئیات بروید: Class و Sequence Diagram برای طراحی فنی

+

۳. مستندسازی زنده: نمودارها را هم‌زمان با توسعه به‌روز نگه دارید

+

۴. ابزار مناسب: از ابزارهایی مانند ابزار UML استفاده کنید که امکان ویرایش آسان و Export به فرمت‌های مختلف را فراهم می‌کنند

+
+💎 نتیجه نهایی: تسلط بر UML نه تنها مهارت مدل‌سازی شما را ارتقا می‌دهد، بلکه ارتباط مؤثر با ذینفعان، کاهش خطاهای طراحی و افزایش کیفیت نرم‌افزار را به همراه خواهد داشت. +
+
+ +
+📚 منابع پیشنهادی برای مطالعه بیشتر: +
    +
  • کتاب «UML Distilled» توسط Martin Fowler
  • +
  • استاندارد OMG UML 2.5
  • +
  • الگوهای طراحی (Design Patterns) توسط Gang of Four
  • +
+
+
+
+ +
+این مستند آموزشی صرفاً جهت استفاده داخلی و آموزشی تهیه شده است. هرگونه کپی‌برداری یا افشا بدون اجازه کتبی ممنوع است. +
+
+ +
+ + \ No newline at end of file diff --git a/Documents/Resources/Tools/Document/xUMLDrawer_Supported_UML_Diagrams_Tutorial.pdf b/Documents/Resources/Tools/Document/xUMLDrawer_Supported_UML_Diagrams_Tutorial.pdf new file mode 100644 index 0000000..d353793 Binary files /dev/null and b/Documents/Resources/Tools/Document/xUMLDrawer_Supported_UML_Diagrams_Tutorial.pdf differ diff --git a/Documents/Resources/Tools/Samples/SampleUMLDiagrams.json b/Documents/Resources/Tools/Samples/SampleUMLDiagrams.json new file mode 100644 index 0000000..bb4fbdb --- /dev/null +++ b/Documents/Resources/Tools/Samples/SampleUMLDiagrams.json @@ -0,0 +1,497 @@ +{ + "version": "5.2", + "fileTitle": "مستندات معماری سازمان - رایان پرداز کاوش", + "fileDescription": "مجموعه کامل دیاگرام‌های UML برای تحلیل معماری فرآیند مدیریت انتشار", + "author": "هادی خزاعی اصل", + "organization": "رایان پرداز کاوش", + "createdAt": "2026-09-08T10:00:00.000Z", + "updatedAt": "2026-09-08T14:30:00.000Z", + "preferences": { + "gridType": "dots", + "darkMode": true + }, + "activeDiagramId": "diagram-1725789000000-abc123", + "diagrams": [ + { + "id": "diagram-1725789000000-abc123", + "diagramType": "usecase", + "title": "Use Case سیستم مدیریت انتشار", + "description": "نمودار موارد کاربرد برای فرآیند Release Management", + "createdAt": "2026-09-08T10:05:00.000Z", + "updatedAt": "2026-09-08T14:30:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 15, + "actors": [ + { "id": 1, "name": "Release Manager", "x": 150, "y": 200 }, + { "id": 2, "name": "Product Owner", "x": 150, "y": 350 }, + { "id": 3, "name": "DevOps Team", "x": 800, "y": 200 }, + { "id": 4, "name": "QA Team", "x": 800, "y": 350 } + ], + "useCases": [ + { "id": 5, "name": "Plan Release", "x": 400, "y": 150, "radius": 50 }, + { "id": 6, "name": "Approve Release", "x": 400, "y": 250, "radius": 50 }, + { "id": 7, "name": "Execute Deployment", "x": 400, "y": 350, "radius": 50 }, + { "id": 8, "name": "Run Smoke Test", "x": 400, "y": 450, "radius": 50 }, + { "id": 9, "name": "Rollback", "x": 600, "y": 300, "radius": 40 } + ], + "systemBoundary": { + "id": 10, + "name": "Release Management System", + "x": 280, + "y": 80, + "width": 400, + "height": 450 + }, + "relationships": [ + { "id": 11, "from": 1, "to": 5, "type": "association" }, + { "id": 12, "from": 2, "to": 6, "type": "association" }, + { "id": 13, "from": 3, "to": 7, "type": "association" }, + { "id": 14, "from": 7, "to": 9, "type": "extend" } + ], + "states": [], + "transitions": [], + "nodes": [], + "flows": [], + "components": [], + "interfaces": [], + "packages": [], + "compRelations": [], + "deployNodes": [], + "artifacts": [], + "deployRelations": [], + "classes": [], + "classRelations": [], + "participants": [], + "activations": [], + "messages": [], + "fragments": [], + "swimlanes": [], + "swNodes": [], + "swFlows": [] + }, + { + "id": "diagram-1725789100000-def456", + "diagramType": "statemachine", + "title": "چرخه حیات Release Ticket", + "description": "نمودار ماشین حالت برای گردش کار بلیط انتشار", + "createdAt": "2026-09-08T10:10:00.000Z", + "updatedAt": "2026-09-08T14:25:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 12, + "states": [ + { "id": 1, "stateType": "initial", "name": "", "x": 100, "y": 200 }, + { "id": 2, "stateType": "state", "name": "Draft", "x": 250, "y": 200, "width": 120, "height": 50 }, + { "id": 3, "stateType": "state", "name": "In Review", "x": 450, "y": 200, "width": 120, "height": 50 }, + { "id": 4, "stateType": "state", "name": "Approved", "x": 650, "y": 200, "width": 120, "height": 50 }, + { "id": 5, "stateType": "state", "name": "Deployed", "x": 850, "y": 200, "width": 120, "height": 50 }, + { "id": 6, "stateType": "final", "name": "", "x": 1050, "y": 200 }, + { "id": 7, "stateType": "state", "name": "Rejected", "x": 450, "y": 350, "width": 120, "height": 50 } + ], + "transitions": [ + { "id": 8, "from": 1, "to": 2, "label": "create" }, + { "id": 9, "from": 2, "to": 3, "label": "submit for review" }, + { "id": 10, "from": 3, "to": 4, "label": "approve [Go]" }, + { "id": 11, "from": 4, "to": 5, "label": "deploy" }, + { "id": 12, "from": 5, "to": 6, "label": "close" } + ], + "actors": [], + "useCases": [], + "systemBoundary": null, + "nodes": [], + "flows": [], + "components": [], + "interfaces": [], + "packages": [], + "compRelations": [], + "deployNodes": [], + "artifacts": [], + "deployRelations": [], + "classes": [], + "classRelations": [], + "participants": [], + "activations": [], + "messages": [], + "fragments": [], + "swimlanes": [], + "swNodes": [], + "swFlows": [], + "relationships": [] + }, + { + "id": "diagram-1725789200000-ghi789", + "diagramType": "activity", + "title": "فرآیند Deployment Runbook", + "description": "نمودار فعالیت برای مراحل استقرار", + "createdAt": "2026-09-08T10:15:00.000Z", + "updatedAt": "2026-09-08T14:20:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 10, + "nodes": [ + { "id": 1, "nodeType": "initialNode", "name": "", "x": 100, "y": 100 }, + { "id": 2, "nodeType": "action", "name": "Backup Database", "x": 250, "y": 100, "width": 140, "height": 50 }, + { "id": 3, "nodeType": "action", "name": "Deploy Package", "x": 450, "y": 100, "width": 140, "height": 50 }, + { "id": 4, "nodeType": "decision", "name": "Success?", "x": 650, "y": 100, "size": 40 }, + { "id": 5, "nodeType": "action", "name": "Run Smoke Test", "x": 850, "y": 100, "width": 140, "height": 50 }, + { "id": 6, "nodeType": "action", "name": "Rollback", "x": 650, "y": 250, "width": 140, "height": 50 }, + { "id": 7, "nodeType": "finalNode", "name": "", "x": 1050, "y": 100 }, + { "id": 8, "nodeType": "forkJoin", "name": "", "x": 350, "y": 100, "width": 6, "height": 100, "orientation": "vertical" } + ], + "flows": [ + { "id": 9, "from": 1, "to": 2, "label": "" }, + { "id": 10, "from": 2, "to": 3, "label": "" }, + { "id": 11, "from": 3, "to": 4, "label": "" }, + { "id": 12, "from": 4, "to": 5, "label": "[yes]" }, + { "id": 13, "from": 4, "to": 6, "label": "[no]" }, + { "id": 14, "from": 5, "to": 7, "label": "" } + ], + "actors": [], + "useCases": [], + "systemBoundary": null, + "states": [], + "transitions": [], + "components": [], + "interfaces": [], + "packages": [], + "compRelations": [], + "deployNodes": [], + "artifacts": [], + "deployRelations": [], + "classes": [], + "classRelations": [], + "participants": [], + "activations": [], + "messages": [], + "fragments": [], + "swimlanes": [], + "swNodes": [], + "swFlows": [], + "relationships": [] + }, + { + "id": "diagram-1725789300000-jkl012", + "diagramType": "component", + "title": "معماری میکروسرویس‌ها", + "description": "نمودار کامپوننت برای لایه‌های معماری", + "createdAt": "2026-09-08T10:20:00.000Z", + "updatedAt": "2026-09-08T14:15:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 8, + "components": [ + { "id": 1, "name": "Frontend App", "x": 200, "y": 100, "width": 140, "height": 70 }, + { "id": 2, "name": "API Gateway", "x": 450, "y": 100, "width": 140, "height": 70 }, + { "id": 3, "name": "User Service", "x": 200, "y": 280, "width": 140, "height": 70 }, + { "id": 4, "name": "Order Service", "x": 450, "y": 280, "width": 140, "height": 70 }, + { "id": 5, "name": "Payment Service", "x": 700, "y": 280, "width": 140, "height": 70 } + ], + "interfaces": [ + { "id": 6, "ifaceType": "provided", "name": "IUserAPI", "x": 270, "y": 180, "direction": "down" }, + { "id": 7, "ifaceType": "required", "name": "IPaymentAPI", "x": 520, "y": 350, "direction": "right" } + ], + "packages": [ + { "id": 8, "name": "OpenShift Cluster", "x": 100, "y": 50, "width": 800, "height": 400 } + ], + "compRelations": [ + { "id": 9, "from": 1, "to": 2, "relType": "dependency", "label": "REST" }, + { "id": 10, "from": 2, "to": 3, "relType": "dependency", "label": "gRPC" }, + { "id": 11, "from": 2, "to": 4, "relType": "dependency", "label": "gRPC" }, + { "id": 12, "from": 4, "to": 5, "relType": "dependency", "label": "Kafka" } + ], + "actors": [], + "useCases": [], + "systemBoundary": null, + "states": [], + "transitions": [], + "nodes": [], + "flows": [], + "deployNodes": [], + "artifacts": [], + "deployRelations": [], + "classes": [], + "classRelations": [], + "participants": [], + "activations": [], + "messages": [], + "fragments": [], + "swimlanes": [], + "swNodes": [], + "swFlows": [], + "relationships": [] + }, + { + "id": "diagram-1725789400000-mno345", + "diagramType": "deployment", + "title": "استقرار در OpenShift", + "description": "نمودار استقرار برای محیط Production", + "createdAt": "2026-09-08T10:25:00.000Z", + "updatedAt": "2026-09-08T14:10:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 8, + "deployNodes": [ + { "id": 1, "nodeType": "node", "name": "OpenShift Master", "x": 200, "y": 150, "width": 180, "height": 120 }, + { "id": 2, "nodeType": "device", "name": "Load Balancer", "x": 500, "y": 150, "width": 180, "height": 120 }, + { "id": 3, "nodeType": "execEnv", "name": "JVM Runtime", "x": 800, "y": 150, "width": 180, "height": 120 }, + { "id": 4, "nodeType": "node", "name": "Oracle DB Server", "x": 200, "y": 380, "width": 180, "height": 120 } + ], + "artifacts": [ + { "id": 5, "name": "app-v2.1.0.jar", "x": 500, "y": 380, "width": 150, "height": 50 }, + { "id": 6, "name": "migration.sql", "x": 800, "y": 380, "width": 150, "height": 50 } + ], + "deployRelations": [ + { "id": 7, "from": 1, "to": 2, "relType": "commPath", "label": "HTTPS" }, + { "id": 8, "from": 2, "to": 3, "relType": "commPath", "label": "HTTP/2" }, + { "id": 9, "from": 5, "to": 3, "relType": "deployRel", "label": "«deploy»" }, + { "id": 10, "from": 6, "to": 4, "relType": "manifestRel", "label": "" } + ], + "actors": [], + "useCases": [], + "systemBoundary": null, + "states": [], + "transitions": [], + "nodes": [], + "flows": [], + "components": [], + "interfaces": [], + "packages": [], + "compRelations": [], + "classes": [], + "classRelations": [], + "participants": [], + "activations": [], + "messages": [], + "fragments": [], + "swimlanes": [], + "swNodes": [], + "swFlows": [], + "relationships": [] + }, + { + "id": "diagram-1725789500000-pqr678", + "diagramType": "class", + "title": "مدل داده Release Management", + "description": "نمودار کلاس برای موجودیت‌های اصلی", + "createdAt": "2026-09-08T10:30:00.000Z", + "updatedAt": "2026-09-08T14:05:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 7, + "classes": [ + { + "id": 1, + "classType": "class", + "name": "Release", + "x": 250, + "y": 200, + "width": 220, + "attributes": [ + { "visibility": "-", "name": "id", "type": "String", "isStatic": false }, + { "visibility": "-", "name": "version", "type": "String", "isStatic": false }, + { "visibility": "-", "name": "status", "type": "ReleaseStatus", "isStatic": false }, + { "visibility": "-", "name": "releaseDate", "type": "Date", "isStatic": false } + ], + "methods": [ + { "visibility": "+", "name": "approve", "params": "approver: User", "returnType": "void", "isStatic": false }, + { "visibility": "+", "name": "deploy", "params": "environment: Env", "returnType": "Boolean", "isStatic": false }, + { "visibility": "+", "name": "rollback", "params": "", "returnType": "void", "isStatic": false } + ] + }, + { + "id": 2, + "classType": "class", + "name": "WorkItem", + "x": 600, + "y": 200, + "width": 220, + "attributes": [ + { "visibility": "-", "name": "id", "type": "String", "isStatic": false }, + { "visibility": "-", "name": "title", "type": "String", "isStatic": false }, + { "visibility": "-", "name": "priority", "type": "Priority", "isStatic": false } + ], + "methods": [ + { "visibility": "+", "name": "linkToRelease", "params": "release: Release", "returnType": "void", "isStatic": false } + ] + }, + { + "id": 3, + "classType": "enumeration", + "name": "ReleaseStatus", + "x": 250, + "y": 450, + "width": 180, + "attributes": [ + { "visibility": "+", "name": "DRAFT", "type": "", "isStatic": false }, + { "visibility": "+", "name": "IN_REVIEW", "type": "", "isStatic": false }, + { "visibility": "+", "name": "APPROVED", "type": "", "isStatic": false }, + { "visibility": "+", "name": "DEPLOYED", "type": "", "isStatic": false } + ], + "methods": [] + }, + { + "id": 4, + "classType": "interface", + "name": "IReleaseManager", + "x": 600, + "y": 450, + "width": 200, + "attributes": [], + "methods": [ + { "visibility": "+", "name": "createRelease", "params": "version: String", "returnType": "Release", "isStatic": false }, + { "visibility": "+", "name": "approveRelease", "params": "releaseId: String", "returnType": "Boolean", "isStatic": false } + ] + } + ], + "classRelations": [ + { "id": 5, "from": 1, "to": 2, "relType": "composition", "label": "", "fromMultiplicity": "1", "toMultiplicity": "0..*" }, + { "id": 6, "from": 1, "to": 3, "relType": "clsDependency", "label": "uses", "fromMultiplicity": "", "toMultiplicity": "" }, + { "id": 7, "from": 4, "to": 1, "relType": "realization", "label": "«implements»", "fromMultiplicity": "", "toMultiplicity": "" } + ], + "actors": [], + "useCases": [], + "systemBoundary": null, + "states": [], + "transitions": [], + "nodes": [], + "flows": [], + "components": [], + "interfaces": [], + "packages": [], + "compRelations": [], + "deployNodes": [], + "artifacts": [], + "deployRelations": [], + "participants": [], + "activations": [], + "messages": [], + "fragments": [], + "swimlanes": [], + "swNodes": [], + "swFlows": [], + "relationships": [] + }, + { + "id": "diagram-1725789600000-stu901", + "diagramType": "sequence", + "title": "توالی استقرار Blue/Green", + "description": "نمودار توالی برای استراتژی Zero Downtime", + "createdAt": "2026-09-08T10:35:00.000Z", + "updatedAt": "2026-09-08T14:00:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 10, + "participants": [ + { "id": 1, "name": "Release Manager", "x": 150, "y": 60, "width": 140 }, + { "id": 2, "name": "CI/CD Pipeline", "x": 350, "y": 60, "width": 140 }, + { "id": 3, "name": "OpenShift", "x": 550, "y": 60, "width": 140 }, + { "id": 4, "name": "Load Balancer", "x": 750, "y": 60, "width": 140 } + ], + "activations": [ + { "id": 5, "participantId": 2, "x": 350, "y": 150, "width": 12, "height": 80 }, + { "id": 6, "participantId": 3, "x": 550, "y": 250, "width": 12, "height": 100 }, + { "id": 7, "participantId": 4, "x": 750, "y": 370, "width": 12, "height": 60 } + ], + "messages": [ + { "id": 8, "fromParticipant": 1, "toParticipant": 2, "msgType": "syncMsg", "label": "triggerDeploy(version)", "y": 150 }, + { "id": 9, "fromParticipant": 2, "toParticipant": 3, "msgType": "syncMsg", "label": "deployToGreen()", "y": 250 }, + { "id": 10, "fromParticipant": 3, "toParticipant": 2, "msgType": "returnMsg", "label": "deploymentResult", "y": 330 }, + { "id": 11, "fromParticipant": 2, "toParticipant": 4, "msgType": "syncMsg", "label": "switchTraffic(green)", "y": 370 }, + { "id": 12, "fromParticipant": 4, "toParticipant": 2, "msgType": "returnMsg", "label": "ack", "y": 410 } + ], + "fragments": [ + { + "id": 13, + "fragmentType": "alt", + "label": "success", + "x": 300, + "y": 200, + "width": 500, + "height": 250, + "operands": [ + { "label": "success", "height": 150 }, + { "label": "failure → rollback", "height": 100 } + ] + } + ], + "actors": [], + "useCases": [], + "systemBoundary": null, + "states": [], + "transitions": [], + "nodes": [], + "flows": [], + "components": [], + "interfaces": [], + "packages": [], + "compRelations": [], + "deployNodes": [], + "artifacts": [], + "deployRelations": [], + "classes": [], + "classRelations": [], + "swimlanes": [], + "swNodes": [], + "swFlows": [], + "relationships": [] + }, + { + "id": "diagram-1725789700000-vwx234", + "diagramType": "swimlane", + "title": "فرآیند Release Management با Swimlanes", + "description": "نمودار Swimlane برای تفکیک وظایف تیم‌ها", + "createdAt": "2026-09-08T10:40:00.000Z", + "updatedAt": "2026-09-08T13:55:00.000Z", + "author": "هادی خزاعی اصل", + "version": "1.0", + "nextId": 10, + "swimlanes": [ + { "id": 1, "name": "Product Owner", "x": 100, "y": 50, "width": 900, "height": 150, "orientation": "horizontal", "color": "#ebf8ff" }, + { "id": 2, "name": "Development", "x": 100, "y": 200, "width": 900, "height": 150, "orientation": "horizontal", "color": "#f0fff4" }, + { "id": 3, "name": "QA", "x": 100, "y": 350, "width": 900, "height": 150, "orientation": "horizontal", "color": "#fffaf0" }, + { "id": 4, "name": "DevOps", "x": 100, "y": 500, "width": 900, "height": 150, "orientation": "horizontal", "color": "#faf5ff" } + ], + "swNodes": [ + { "id": 5, "nodeType": "swInitial", "name": "", "x": 150, "y": 125 }, + { "id": 6, "nodeType": "swAction", "name": "Define Scope", "x": 300, "y": 125, "width": 120, "height": 50 }, + { "id": 7, "nodeType": "swAction", "name": "Develop Features", "x": 300, "y": 275, "width": 140, "height": 50 }, + { "id": 8, "nodeType": "swAction", "name": "Code Review", "x": 500, "y": 275, "width": 120, "height": 50 }, + { "id": 9, "nodeType": "swAction", "name": "Run Tests", "x": 300, "y": 425, "width": 120, "height": 50 }, + { "id": 10, "nodeType": "swDecision", "name": "Pass?", "x": 500, "y": 425, "size": 40 }, + { "id": 11, "nodeType": "swAction", "name": "Deploy to Prod", "x": 700, "y": 575, "width": 140, "height": 50 }, + { "id": 12, "nodeType": "swFinal", "name": "", "x": 900, "y": 575 } + ], + "swFlows": [ + { "id": 13, "from": 5, "to": 6, "label": "" }, + { "id": 14, "from": 6, "to": 7, "label": "" }, + { "id": 15, "from": 7, "to": 8, "label": "" }, + { "id": 16, "from": 8, "to": 9, "label": "" }, + { "id": 17, "from": 9, "to": 10, "label": "" }, + { "id": 18, "from": 10, "to": 11, "label": "[yes]" }, + { "id": 19, "from": 11, "to": 12, "label": "" } + ], + "actors": [], + "useCases": [], + "systemBoundary": null, + "states": [], + "transitions": [], + "nodes": [], + "flows": [], + "components": [], + "interfaces": [], + "packages": [], + "compRelations": [], + "deployNodes": [], + "artifacts": [], + "deployRelations": [], + "classes": [], + "classRelations": [], + "participants": [], + "activations": [], + "messages": [], + "fragments": [], + "relationships": [] + } + ] +} \ No newline at end of file diff --git a/Documents/Resources/Tools/Screenshots/1.png b/Documents/Resources/Tools/Screenshots/1.png new file mode 100644 index 0000000..14adb02 Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/1.png differ diff --git a/Documents/Resources/Tools/Screenshots/2.png b/Documents/Resources/Tools/Screenshots/2.png new file mode 100644 index 0000000..50e1524 Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/2.png differ diff --git a/Documents/Resources/Tools/Screenshots/3.png b/Documents/Resources/Tools/Screenshots/3.png new file mode 100644 index 0000000..8e22ac7 Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/3.png differ diff --git a/Documents/Resources/Tools/Screenshots/4.png b/Documents/Resources/Tools/Screenshots/4.png new file mode 100644 index 0000000..6b8e394 Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/4.png differ diff --git a/Documents/Resources/Tools/Screenshots/5.png b/Documents/Resources/Tools/Screenshots/5.png new file mode 100644 index 0000000..7b631ae Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/5.png differ diff --git a/Documents/Resources/Tools/Screenshots/6.png b/Documents/Resources/Tools/Screenshots/6.png new file mode 100644 index 0000000..7535ba2 Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/6.png differ diff --git a/Documents/Resources/Tools/Screenshots/7.png b/Documents/Resources/Tools/Screenshots/7.png new file mode 100644 index 0000000..7bd8bff Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/7.png differ diff --git a/Documents/Resources/Tools/Screenshots/8.png b/Documents/Resources/Tools/Screenshots/8.png new file mode 100644 index 0000000..21a7ef9 Binary files /dev/null and b/Documents/Resources/Tools/Screenshots/8.png differ diff --git a/Documents/Resources/Tools/xUMLDrawer.html b/Documents/Resources/Tools/xUMLDrawer.html new file mode 100644 index 0000000..1ffc02d --- /dev/null +++ b/Documents/Resources/Tools/xUMLDrawer.html @@ -0,0 +1,2360 @@ + + + + + +ابزار رسم نمودارهای UML + + + + + +
+
+
+
+
+

🎯 ابزار رسم نمودارهای UML

+

مدیریت چند نمودار با قابلیت ذخیره و بازیابی

+
+
طراح: هادی خزاعی اصل
+
+
+
+ +
+ + + +
+ + +
+ +
100%
+ +
+
+
+ +
+ + +
+
+ +
+
+ + +
+ + + + + +
+
+
+
+
+

⚙️ ویژگی‌های المان

+ +
+
+
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file