de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW
Table of Contents hide

بحران مستندسازی

هر تیم مهندسی این درد را می‌شناسد. شما هفته‌ها را صرف طراحی یک معماری میکروسرویس زیبا می‌کنید و با دقت نمودارهای Visio را تهیه می‌کنید که ذینفعان را تحت تأثیر قرار دهد. شش ماه بعد، سیستم تکامل یافته است—سرویس‌های جدید اضافه شده، پایگاه‌های داده مهاجرت کرده، و نقاط پایانی API منسوخ شده‌اند—اما نمودار در زمان منجمد شده است. این یک بازمانده است. حتی یک دروغ.

این «فاسد شدن مستندات» است و قاتل خاموش بهره‌وری مهندسی محسوب می‌شود. وقتی نمودارها دروغ می‌گویند، توسعه‌دهندگان آن‌ها را نادیده می‌گیرند. وقتی توسعه‌دهندگان مستندات را نادیده می‌گیرند، دانش قبیله‌ای حاکم می‌شود. وقتی تنها کسی که سیستم را می‌شناسد می‌رود، شما با یک کدبیس پیچیده و بدون نقشه روبرو می‌مانید.

نمودار-به-کد (DaC) راه‌حل است. و در قلب آن قرار دارد Mermaid، ابزار ترسیم مبتنی بر جاوااسکریپتی که متن ساده را به بصری‌های زیبا تبدیل می‌کند.

نمودار به عنوان کد (DaC): حل بحران مستندسازی


فلسفه اصلی: نمودارها را مانند نرم‌افزار در نظر بگیرید

تغییر بنیادین در نمودار-به-کد، برخورد با نمودارها با همان سخت‌گیری و دقتی است که برای کد برنامه‌های خود به کار می‌برید. این به معنای آن است که:

۱. کنترل نسخه استاندارد است

وقتی نمودار شما یک فایل .mermaid باشد، در مخزن Git شما در کنار کد منبع شما زندگی می‌کند. هر تغییری ردیابی می‌شود. شما می‌توانید git blame را اجرا کنید تا ببینید چه کسی آن سرویس جدید را اضافه کرده است، git diff را اجرا کنید تا تغییرات را قبل از ادغام بررسی کنید و به هر حالت قبلی بازگردید.

gitGraph
    commit id: "معماری اولیه"
    commit id: "افزودن سرویس کاربر"
    branch feature/order-service
    commit id: "نسخه ۱ سرویس سفارش"
    commit id: "افزودن درگاه پرداخت"
    checkout main
    merge feature/order-service
    commit id: "به‌روزرسانی درگاه API"

مثال: تجسم تاریخچه Git خودِ نمودار با استفاده از سینتکس Git Graph در Mermaid

۲. بازبینی کد برای نمودارها

درخواست‌های کشش (Pull Requests) دیگر فقط برای کد نیستند. وقتی یک توسعه‌دهنده سرویس جدیدی را پیشنهاد می‌دهد یا جریان داده‌ای را تغییر می‌دهد، آن تغییر به صورت یک دیف (diff) قابل خواندن در درخواست کشش ظاهر می‌شود. بازبینی‌کنندگان می‌توانند روی خودِ نمودار نظر دهند تا اطمینان حاصل شود که تصمیمات معماری قبل از ادغام شدن، بحث و تأیید شده‌اند.

۳. یکپارچه‌سازی با پایپ‌لاین CI/CD

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

  • همه نمودارهای Mermaid را به صورت PNG/SVG رندر کند

  • آن‌ها را در سایت مستندات شما بارگذاری کند

  • در صورت تشخیص سینتکس نامعتبر Mermaid، ساخت را شکست دهد

 

نمودار جریان چپ‌به‌راست
    A[توسعه‌دهنده کد را ارسال می‌کند] --> B[مسیر CI اجرا می‌شود]
    B --> C[اجرای تست‌ها]
    B --> D[ترسیم نمودارهای مریم‌ماهی]
    D --> E{نحو معتبر است؟}
    E -->|بله| F[بارگذاری در مستندات]
    E -->|خیر| G[شکست ساخت و اطلاع‌رسانی به تیم]
    F --> H[نصب برنامه]
    G --> I[توسعه‌دهنده نحو را اصلاح می‌کند]
    I --> A

مثال: یک گردش کار CI/CD برای اعتبارسنجی و استقرار نمودارها


مریم‌ماهی در عمل: مثال‌های واقعی

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

مثال ۱: معماری میکروسرویس‌ها (نمودار جریان)

این رایج‌ترین مورد استفاده است—تصویرسازی نحوه ارتباط سرویس‌های شما.

نمودار جریان بالا‌به‌پایین
    زیرگروه "لایه مشتری"
        MobileApp[برنامه موبایل]
        WebApp[برنامه وب]
    پایان

    زیرگروه "درگاه API"
        Gateway[درگاه API]
    پایان

    زیرگروه "میکروسرویس‌ها"
        UserSvc[سرویس کاربر]
        OrderSvc[سرویس سفارش]
        ProductSvc[سرویس محصول]
        PaymentSvc[سرویس پرداخت]
    پایان

    زیرگروه "لایه داده"
        UserDB[(پایگاه داده کاربر)]
        OrderDB[(پایگاه داده سفارش)]
        ProductDB[(پایگاه داده محصول)]
        Redis[(کش Redis)]
    پایان

    زیرگروه "سرویس‌های خارجی"
        Stripe[پرداخت Stripe]
        EmailAPI[API ایمیل]
    پایان

    MobileApp --> Gateway
    WebApp --> Gateway
    Gateway --> UserSvc
    Gateway --> OrderSvc
    Gateway --> ProductSvc
    Gateway --> PaymentSvc

    UserSvc --> UserDB
    UserSvc --> Redis
    OrderSvc --> OrderDB
    OrderSvc --> Redis
    ProductSvc --> ProductDB
    ProductSvc --> Redis

    PaymentSvc --> Stripe
    OrderSvc --> EmailAPI
    PaymentSvc --> EmailAPI

مثال: یک معماری کامل میکروسرویس‌ها با کش، پایگاه‌های داده و وابستگی‌های خارجی

مثال ۲: گردش احراز هویت کاربر (نمودار توالی)

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

نمودار توالی
    شماره‌گذاری خودکار
    شرکت‌کننده: کاربر
    شرکت‌کننده: رابط کاربری
    شرکت‌کننده: سرویس احراز هویت
    شرکت‌کننده: پایگاه داده کاربر
    شرکت‌کننده: کش
    شرکت‌کننده: سرویس ایمیل

    کاربر->>رابط کاربری: وارد کردن اطلاعات ورود
    رابط کاربری->>سرویس احراز هویت: POST /login (ایمیل، رمز عبور)
    سرویس احراز هویت->>پایگاه داده کاربر: جستجوی کاربر بر اساس ایمیل
    پایگاه داده کاربر-->>سرویس احراز هویت: بازگرداندن رمز عبور هش‌شده و داده‌های کاربر
    سرویس احراز هویت->>سرویس احراز هویت: تأیید رمز عبور با bcrypt
    
    اگر اطلاعات ورود معتبر باشد
        سرویس احراز هویت->>سرویس احراز هویت: تولید توکن JWT
        سرویس احراز هویت->>کش: ذخیره نشست (کلید: user_id، مدت‌زمان: ۱ ساعت)
        سرویس احراز هویت-->>رابط کاربری: ۲۰۰ OK + توکن JWT
        رابط کاربری-->>کاربر: هدایت به داشبورد
    در غیر این صورت
        سرویس احراز هویت->>سرویس ایمیل: فعال کردن هشدار ورود ناموفق
        سرویس احراز هویت-->>رابط کاربری: ۴۰۱ غیرمجاز
        رابط کاربری-->>کاربر: نمایش پیام خطا
    پایان
    
    یادداشت روی سرویس احراز هویت و سرویس ایمیل: پس از ۵ تلاش ناموفق، حساب کاربری برای ۱۵ دقیقه قفل می‌شود

مثال: یک گردش احراز هویت دقیق که مسیرهای موفقیت و شکست را نشان می‌دهد، شامل اثرات جانبی مانند کش و هشدارها

مثال ۳: زیرساخت ابری در AWS (نمودار کلاس)

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

نمودار کلاس
    کلاس VPC {
        +string cidr_block
        +string region
        +createSubnet()
        +deleteSubnet()
    }

    کلاس Subnet {
        +string availability_zone
        +string cidr_block
        +boolean is_public
        +attachRouteTable()
    }

    کلاس EC2Instance {
        +string instance_type
        +string ami_id
        +int storage_gb
        +start()
        +stop()
        +reboot()
    }

    کلاس RDSDatabase {
        +string engine
        +string version
        +int storage_gb
        +boolean multi_az
        +takeSnapshot()
        +restoreFromSnapshot()
    }

    کلاس S3Bucket {
        +string bucket_name
        +string region
        +boolean versioning_enabled
        +uploadFile()
        +downloadFile()
    }

    کلاس IAMRole {
        +string role_name
        +string policy_document
        +attachPolicy()
        +detachPolicy()
    }

    VPC "1" --> "*" Subnet
    Subnet "1" --> "*" EC2Instance
    Subnet "1" --> "0..1" RDSDatabase
    VPC "1" --> "0..*" S3Bucket
    EC2Instance --> IAMRole
    RDSDatabase --> IAMRole

مثال: مدل‌سازی زیرساخت AWS به عنوان کلاس‌ها با ویژگی‌ها و روش‌ها، مفید برای مستندسازی و برنامه‌ریزی زیرساخت به عنوان کد

مثال ۴: پردازش سفارش در تجارت الکترونیک (نمودار وضعیت)

نمودارهای وضعیت در نمایش نحوه گذر موجودیت‌ها از وضعیت‌های مختلف عالی هستند.

نمودار حالت-v2
    [*] --> Cart: کاربر کالاها را اضافه می‌کند
    Cart --> Checkout: کاربر به مرحله پرداخت می‌رود
    
    Checkout --> PaymentPending: کاربر سفارش را ارسال می‌کند
    PaymentPending --> PaymentProcessing: درگاه پرداخت را فعال کنید
    
    PaymentProcessing --> Paid: پرداخت موفق
    PaymentProcessing --> PaymentFailed: پرداخت رد شد
    
    PaymentFailed --> Checkout: کاربر پرداخت را دوباره تلاش می‌کند
    PaymentFailed --> [*]: کاربر سبد خرید را رها می‌کند
    
    Paid --> OrderConfirmed: ایمیل تأیید ارسال شود
    OrderConfirmed --> Preparing: به انبار تخصیص داده شود
    
    Preparing --> Shipped: به شرکت حمل‌ونقل تحویل داده شود
    Shipped --> InTransit: شرکت حمل‌ونقل کالا را دریافت می‌کند
    
    InTransit --> Delivered: تحویل تأیید شد
    Delivered --> ReviewPrompted: از کاربر درخواست نظر شود
    
    ReviewPrompted --> [*]: کاربر نظر خود را ارسال می‌کند
    Delivered --> RefundRequested: کاربر درخواست بازگشت وجه می‌دهد
    
    RefundRequested --> RefundApproved: پشتیبانی تأیید می‌کند
    RefundApproved --> RefundProcessed: پول بازگردانده می‌شود
    RefundProcessed --> [*]: سفارش بسته می‌شود
    
    state "بررسی کلاهبرداری با ریسک بالا" as FraudCheck {
        [*] --> CheckScore
        CheckScore --> LowRisk: امتیاز < 50
        CheckScore --> HighRisk: امتیاز >= 50
        HighRisk --> ManualReview: برای بررسی تیم علامت‌گذاری شود
        ManualReview --> LowRisk: تأیید شد
        ManualReview --> PaymentFailed: رد شد
    }
    
    PaymentPending --> FraudCheck: ارزیابی ریسک فعال شد
    FraudCheck --> PaymentProcessing: ریسک پایین

مثال: ماشین حالت کامل سفارش تجارت الکترونیک با حالت تو در تو تشخیص کلاهبرداری

مثال ۵: برنامه‌ریزی اسپرینت با استفاده از مسائل گیت‌هاب (نمودار گیت)

نمودارهای گیت می‌توانند فرآیندهای کاری فراتر از خود گیت را نمایش دهند.

gitGraph
    commit id: "برنامه‌ریزی اسپرینت" type: HIGHLIGHT
    
    branch sprint-1
    commit id: "داستان کاربر #101: صفحه ورود"
    commit id: "داستان کاربر #102: ثبت‌نام کاربر"
    
    branch bugfix/hotfix
    commit id: "اصلاح فوری: انقضای توکن احراز هویت"
    checkout sprint-1
    merge bugfix/hotfix
    
    commit id: "داستان کاربر #103: بازنشانی رمز عبور"
    
    checkout main
    merge sprint-1 tag: "v1.0.0"
    
    branch sprint-2
    commit id: "ویژگی #201: سبد خرید"
    commit id: "ویژگی #202: جریان پرداخت"
    
    branch experiment/ai-recommendations
    commit id: "POC: موتور توصیه‌گر یادگیری ماشین"
    
    checkout sprint-2
    commit id: "ویژگی #203: تاریخچه سفارش"
    
    checkout main
    merge sprint-2 tag: "v2.0.0"
    
    commit id: "یادداشت‌های انتشار: تکمیل اسپرینت ۱ و ۲"

مثال: تجسم مدیریت پروژه، اسپرینت‌ها و شاخه‌های ویژگی به عنوان یک نمودار گیت


انقلاب هوش مصنوعی در ترسیم نمودار

با وجود زیبایی مرمید، نحو (syntax) می‌تواند مانعی باشد. چه کسی می‌خواهد هنگام مستندسازی یک سیستم، با یک فلش نامتقارن یا یک براکت گمشده اشکال‌زدایی کند؟

اینجاست که ابزارهای مبتنی بر هوش مصنوعی همه چیز را تغییر می‌دهند.

اصلاح خودکار هوش مصنوعی

ابزارهایی مانند VPasCode (پلتفرم نمودار به عنوان کد ویژوال پارادایم) و Mermaid Chart مدل‌های هوش مصنوعی یکپارچه‌ای (مانند Google Gemini و OpenAI) را دارند که می‌توانند:

  • تشخیص خودکار خطاهای نحو

  • اصلاح نمودارهای خراب با یک کلیک

  • پیشنهاد بهبودهای ساختار نمودار

بیایید این را در عمل ببینیم:

کد مرمید خراب:

 

 

flowchart LR
    A[Frontend] --> B(API Gateway
    B --> C[User Service]
    C --> D[(Database
    D --> E[Cache]

کد اصلاح‌شده توسط هوش مصنوعی:

 

flowchart LR
    A[Frontend] --> B(API Gateway)
    B --> C[User Service]
    C --> D[(Database)]
    D --> E[Cache]

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

زبان طبیعی به نمودار

شاید قدرتمندترین ویژگی، تولید نمودارها از توصیفات زبان طبیعی باشد. با ابزارهایی مانند OpenDocs (پلتفرم مستندات VP)، می‌توانید به سادگی آنچه را که می‌خواهید توصیف کنید:

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

مریمد تولیدشده توسط هوش مصنوعی:

 

 

flowchart TD
    Start([User Attempts Login]) --> EnterCreds[Enter Email & Password]
    EnterCreds --> Validate{Validate Credentials}
    Validate -->|Valid| Dashboard[Redirect to Dashboard]
    Validate -->|Invalid| CheckAttempts{Attempts < 3}
    CheckAttempts -->|Yes| Increment[Increment Attempt Counter]
    Increment --> ShowError[Show Error Message]
    ShowError --> EnterCreds
    CheckAttempts -->|No| LockAccount[Lock Account for 15 min]
    LockAccount --> SendAlert[Send Security Alert Email]
    SendAlert --> End([Process Ends])
    Dashboard --> End

ترجمه بین انواع نمودارها

هوش مصنوعی همچنین می‌تواند بین فرمت‌های مختلف نمودار ترجمه انجام دهد. آیا نیاز به تبدیل نمودار PlantUML به مریمد دارید؟ ابزارهای هوش مصنوعی می‌توانند این کار را انجام دهند:

ورودی PlantUML:

 

 

@startuml
actor User
participant "Frontend" as FE
participant "Backend" as BE
database "DB" as DB

User -> FE: Click Login
FE -> BE: POST /login
BE -> DB: SELECT user
DB --> BE: user data
BE --> FE: JWT token
FE --> User: Show Dashboard
@enduml

مریمد تبدیل‌شده توسط هوش مصنوعی:

 

 

sequenceDiagram
    actor User
    participant Frontend
    participant Backend
    participant Database
    
    User->>Frontend: Click Login
    Frontend->>Backend: POST /login
    Backend->>Database: SELECT user
    Database-->>Backend: user data
    Backend-->>Frontend: JWT token
    Frontend-->>User: Show Dashboard

یکپارچه‌سازی چت‌بات تعاملی

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

کاربر: «یک سرویس جدید به نام «سرویس موجودی» به نمودار معماری من اضافه کنید.»

هوش مصنوعی: «من یک سرویس موجودی به سرویس‌های موجود محصول و سفارش شما متصل می‌کنم.»

نمودار به‌طور خودکار به‌روزرسانی می‌شود

کاربر: «در واقع، آن را طوری تنظیم کن که به پایگاه داده جدیدی به نام «InventoryDB» نیز متصل شود.»

هوش مصنوعی: «انجام شد. سرویس موجودی اکنون به سرویس محصول، سرویس سفارش و پایگاه داده جدید InventoryDB متصل است.»


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

گام ۱: با کارهای کوچک شروع کنید

سعی نکنید کل سیستم خود را یک‌باره نمودار کنید. با یک جزء واحد شروع کنید—شاید جریان احراز هویت شما یا یک ویژگی جدید که در حال ساخت آن هستید.

گام ۲: در مستندات تعبیه کنید

فایل‌های خود را در کنار مستندات خود نگه دارید (مثلاً در یک پوشه .mermaid در کنار مستندات خود نگه دارید (مثلاً در یک پوشه /docs). از ابزارهایی مانند mermaid-cli برای رندر کردن آن‌ها در طول فرآیند ساخت استفاده کنید.

گام ۳: از موتور یکپارچه VPasCode بهره ببرید

اگر در تیمی با ترجیحات متنوع کار می‌کنید، VPasCode بی‌نظیر است. این ابزار از چندین زبان نمودار به‌عنوان کد در یک مکان پشتیبانی می‌کند:

# در VPasCode، می‌توانید ترکیبی از موارد زیر را استفاده کنید:
diagrams/
  ├── architecture.mermaid
  ├── deployment.puml      # PlantUML
  ├── database-erd.mermaid
  └── workflow.d2          # زبان D2

گام ۴: با CI/CD خودکارسازی کنید

یک مرحله به GitHub Actions یا GitLab CI خود اضافه کنید:

- name: رندر نمودارهای Mermaid
  run: |
    for file in $(find docs -name "*.mermaid"); do
      npx @mermaid-js/mermaid-cli -i $file -o ${file%.mermaid}.png
    done

- name: آپلود به سایت مستندات
  run: |
    aws s3 sync docs/ s3://your-docs-bucket/

گام ۵: بازبینی در درخواست‌های کشیدن (Pull Requests)

سیاستی وضع کنید که تمام تغییرات معماری نیاز به به‌روزرسانی نمودارها داشته باشند. از نظرات درخواست‌های کشیدن برای بحث درباره تغییرات بصری استفاده کنید:

بازبینی‌کننده: «آیا کش نباید بین سرویس سفارش و پایگاه داده قرار گیرد؟ در حال حاضر فقط به سرویس کاربر متصل است.»

نویسنده: «نکته خوبی بود. من نمودار را به‌روزرسانی می‌کنم.»


تأثیر در دنیای واقعی: یک مطالعه موردی

یک استارتاپ فین‌تک را در نظر بگیرید که با استفاده از Mermaid و VPasCode، رویکرد «نمودار به عنوان کد» را پذیرفته است:

  • قبل از: ۴۷ فایل Visio ثابت، که بیشتر از آن‌ها بیش از ۶ ماه قدمت داشتند. نیروهای جدید ۳ هفته صرف درک معماری کردند.

  • بعد از: ۱۲ نمودار Mermaid، که همگی در Git ذخیره شده و با هر ویژگی به‌روزرسانی می‌شدند. نیروهای جدید در هفته اول بهره‌ور شدند.

مدیر فناوری اطلاعات تیم یادآور شد: «ما از نمودارهایی که فقط یک چک‌لیست انطباق بودند، به بخش زنده‌ای از فرآیند توسعه خود رسیدیم. وقتی درباره معماری جدید بحث می‌کنیم، ویرایشگر Mermaid را باز می‌کنیم و آن را واقعاً با کد ترسیم می‌کنیم. این یک تغییر بزرگ است.»


آینده: مستندسازی مستمر

هدف نهایی «مستندسازی مستمر» است، جایی که نمودارها به‌طور خودکار از زیرساخت یا کد شما تولید می‌شوند. ابزارهایی در حال ظهور هستند که می‌توانند:

  • منیفست‌های Kubernetes شما را اسکن کرده و نمودارهای توپولوژی سرویس را تولید کنند

  • فایل‌های OpenAPI/Swagger را تجزیه کرده و نمودارهای جریان API را ایجاد کنند

  • منابع ابری شما را پایش کرده و نمودارهای معماری را به‌طور خودکار به‌روزرسانی کنند

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


شروع امروز

آیا برای فراتر رفتن از تصاویر ثابت آماده‌اید؟ این برنامه عملیاتی شماست:

  1. افزونه Mermaid را نصب کنید در محیط توسعه ترجیحی خود (VS Code، IntelliJ)

  2. اولین نمودار خود را ایجاد کنید در یک.md فایل با استفاده از نحو Mermaid

  3. سطح رایگان VPasCode را بررسی کنید تا از ترسیم نمودار با هوش مصنوعی بهره‌مند شوید

  4. یک مخزن مستندات زنده را آغاز کنیددر کنار کدبیس شما

  5. این مقاله را با تیم خود به اشتراک بگذاریدو گفتگو را آغاز کنید

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