تحتاج أحياناً إلى شرح من يستخدم النظام، وأحياناً إلى تتبع طلب داخله أو عرض أصنافه وعلاقاتها. هذه أسئلة مختلفة، ولهذا نستخدم Use Case وSequence وClass. سنرسم المناظير الثلاثة لنظام حجز أجهزة مختبر، ونراجع أن أسماء الأطراف والوظائف والبيانات تتفق بينها ومع التنفيذ.

ثبت السيناريو قبل الرسم

السيناريو التعليمي هو أن طالباً مصادقاً يختار جهازاً وفترة، ثم يطلب الحجز. يفحص الخادم الصلاحية والتعارض ويحفظ الحجز إن أمكن. يستطيع المسؤول إدارة الأجهزة، لكن ذلك لا يعني أنه يوافق يدوياً على كل حجز؛ لا تضف خطوة موافقة إلى الرسم دون متطلب يقابلها. المرجع الاصطلاحي للغة هو مواصفة UML المنشورة من OMG.

من يتفاعل مع ماذا؟ Use Case

مخطط حالات استخدام: طالب ينشئ الحجز ويلغي حجزه، ومسؤول يدير الأجهزةLab Booking SystemStudentAdminCreate bookingCancel own bookingManage devices
حالات الاستخدام وحدود النظام؛ الرسم مثال تعليمي لنطاق الحجز الموضح.

في التمثيل النصي التالي يقع المستطيل حول وظائف نظام الحجز، ويقع الممثلان خارجه. ربط الطالب بحالتي الإنشاء والإلغاء يصف ما يستخدمه من وظائف، ولا يشرح ترتيب استدعاء قاعدة البيانات؛ لذلك لا تضع جدول bookings كممثل بشري.

Student ──┬── [ Lab Booking System ] ── Admin
          │    (Create booking)        │
          └─── (Cancel own booking)    └── (Manage devices)

ولإنشاء الرسم بأداة PlantUML، يمكن تكييف المصدر الآتي. استُخدمت أسماء إنجليزية قصيرة داخل المخطط لتسهيل تبادل الملف؛ اكتب قاموس المصطلحات العربي في التقرير أو استخدم أسماء عربية عندما تتأكد من دعم الخط والرسم في أداتك.

@startuml
left to right direction
actor Student
actor Admin
rectangle "Lab Booking System" {
  usecase "Create booking" as Create
  usecase "Cancel own booking" as Cancel
  usecase "Manage devices" as Manage
}
Student -- Create
Student -- Cancel
Admin -- Manage
@enduml

تشرح وثائق PlantUML لحالات الاستخدام تعريف الممثل والحالة وحد النظام. لا تستخدم include لإضافة كل خطوة تقنية؛ العلاقة تحتاج معنى وظيفياً صحيحاً. ويمكن الاكتفاء بالمخطط الواضح دون علاقات إضافية إن لم تخدم سؤال التقرير.

كيف تنفذ عملية الحجز؟ Sequence

مخطط تسلسل طلب الحجز: تحقق وحفظ ثم فرع تعارض أو تأكيدStudentUIBookingServiceDBchoose periodcreateBookingvalidatetransaction: check + saveunavailableconflictbookingIdconfirmedshow outcomealt conflictelse available
تسلسل تعليمي يبيّن بديل التعارض والتأكيد؛ تفاصيل المعاملة تُثبت في التنفيذ والاختبار.

يتتبع مخطط التسلسل طلباً واحداً من الطالب إلى الواجهة والخدمة وقاعدة البيانات. أظهر فرع التعارض بدلاً من رسم النجاح فقط. الكلمات بين الأطراف رسائل ومسؤوليات، وليست بالضرورة أسماء دوال نهائية قبل اكتمال التنفيذ.

@startuml
actor Student
boundary UI
control BookingService
database DB
Student -> UI: choose(device, period)
UI -> BookingService: createBooking(user, device, period)
BookingService -> BookingService: validate user and period
BookingService -> DB: transaction: check and save
alt conflict
  DB --> BookingService: unavailable
  BookingService --> UI: conflict
else available
  DB --> BookingService: bookingId
  BookingService --> UI: confirmed(bookingId)
end
UI --> Student: show outcome
@enduml

عبارة transaction هنا التزام تصميمي يجب أن يفسر التنفيذ كيف يحققه، وليست تعويذة تمنع التعارض تلقائياً. إذا أصبحت قاعدة الحجز في مكون آخر، حدّث المشاركين والرسائل. يوضح مرجع التسلسل في PlantUML الأسهم والبدائل، لكن صحة السيناريو تأتي من تطابق الرسم مع قواعد مشروعك.

ما البنية التي تحمل هذا السلوك؟ Class

مخطط أصناف يربط المستخدم والجهاز بالحجز مع خدمة إنشاء الحجزUser+ id: int+ displayName: stringDevice+ id: int+ name: stringBookingService+ createBooking(...)Booking+ id: int+ startsAt: datetime+ endsAt: datetime+ status: string10..*10..*uses
منظور مفاهيمي للأصناف والعلاقات؛ لكل حجز مستخدم وجهاز، وقد يملك كل منهما عدة حجوزات.

يوضح الرسم التالي أن المستخدم والجهاز يرتبطان بعدة حجوزات، وأن خدمة الحجز تعتمد هذه الكيانات. العلامة 1 في طرف المستخدم تعني أن الحجز الواحد له مستخدم واحد في هذا النموذج. لا تضف تركيباً Composition لمجرد رغبتك في شكل سهم مختلف؛ لهذه العلاقات دلالات تتعلق بالملكية والعمر.

@startuml
class User {
  +id: int
  +displayName: string
}
class Device {
  +id: int
  +name: string
}
class Booking {
  +id: int
  +startsAt: datetime
  +endsAt: datetime
  +status: string
}
class BookingService {
  +createBooking(user, device, period)
}
User "1" -- "0..*" Booking
Device "1" -- "0..*" Booking
BookingService ..> Booking
BookingService ..> Device
@enduml

هذا مخطط مفاهيمي؛ في إطار يعتمد ORM قد تمثل الأصناف نماذج بيانات، بينما يفصل تصميم آخر كائنات المجال عن جداول التخزين. اشرح المستوى الذي رسمته، ولا تدع القارئ يظنه مخططاً مولداً من الكود إن لم يكن كذلك. يعرض مرجع Class صياغة السمات والعلاقات.

قائمة فحص الاتساق

  • هل Create booking في Use Case يقابله سيناريو موثق ومسار منفذ؟
  • هل بيانات device وperiod في التسلسل موجودة في عقد الطلب؟
  • هل مسؤولية التحقق والحفظ في الرسم توافق موقعها في الكود؟
  • هل علاقة المستخدم بالحجز توافق مفاتيح قاعدة البيانات وسياسة الحذف؟
  • هل فرع التعارض موجود في الاختبارات، لا في الرسم فقط؟
  • هل عُدلت المخططات بعد آخر تغيير جوهري؟

ترافق الرسوم مصادر PlantUML يمكن تعديلها وإعادة تصييرها؛ لم يُختبر مصيّر PlantUML محلياً. احتفظ بهذه المصادر مع التقرير، وراجعها عند تغيير متطلبات النظام. ولمراجعة الرسوم ضمن التوثيق التقني، أرفق نسخة الكود التي يفترض أن تصفها، حتى يمكن مقارنة الأسماء والعلاقات وتسلسل التنفيذ.

المصادر

مراجعة المصادر: .

اختبار المثال وحدوده

أُعدت ثلاثة رسوم SVG تعليمية وفُحص تركيب XML واتساقها مع السيناريو، وروجعت مصادر PlantUML مقابل الوثائق؛ لم يُختبر مصيّر PlantUML.

مقالات ذات صلة

الخدمة المرتبطة: إعداد التوثيق والتقارير التقنية.

أرسل متطلبات مشروعك