Môn học: Phân tích và Thiết kế Hệ thống
Đề tài: Thiết kế hệ thống đặt phòng khách sạn (Hotel Booking System)
Giảng viên: traltb@fe.edu.vn
Thiết kế một module đặt phòng khách sạn áp dụng:
- Mô hình 3 lớp (Controller - Service - Repository)
- UML Class Diagram với các mối quan hệ: Composition, Aggregation, Association, Dependency, Realization
- SOLID Principles
- PlantUML để documentation
progress-test-2/
├── README.md # File này
├── Progress_Test_2.docx # Báo cáo hoàn chỉnh (Phần 1, 2, 3)
├── HotelBookingSystem.puml # PlantUML source code
├── SodoUML.png # Sơ đồ UML (xuất từ PlantUML hoặc StarUML)
├── generate-doc.js # Script tạo file Word
├── .gitignore # Git ignore configuration
└── docs/ # Thư mục tài liệu bổ sung (optional)
- Phân tích Lifecycle: Guest vs Booking, Hotel vs Room
- Interface Pattern: Tại sao cần IBookingService?
- Multiplicity: Bội số giữa Booking và Room
- Method Parameters: Tham số cho makeReservation()
- Dependencies: Tương tác trong calculateTotal()
- Design Evolution: Xử lý khi xóa Guest nhưng giữ Booking
- Repository Pattern: Lợi ích khi chuyển đổi database
- Aggregation: Mối quan hệ Booking - Invoice
- Composition: Mối quan hệ Booking - Payment
Sơ đồ bao gồm:
- Controller Layer: BookingController
- Service Layer: IBookingService, BookingService
- Repository Layer: IBookingRepository, IRoomRepository
- Domain Entities: Hotel, Room, RoomType, Guest, Booking, BookingStatus
Code PlantUML với:
- ✓ Linetype ortho
- ✓ Stereotypes (<>, <>, <>)
- ✓ 3+ attributes và 2+ methods cho mỗi class
- ✓ Visibility modifiers (+/-)
- ✓ Đầy đủ relationships: Realization, Composition, Association, Dependency
- ✓ Multiplicity rõ ràng
- ✓ Notes giải thích design decisions
git clone https://github.com/[username]/progress-test-2.git
cd progress-test-2Cách 1: Sử dụng IntelliJ IDEA
- Cài đặt PlantUML Integration plugin
- Mở file
HotelBookingSystem.puml - Xem preview ở bên phải
Cách 2: Command line
# Cài đặt PlantUML (Ubuntu/Debian)
sudo apt-get install plantuml graphviz
# Generate PNG
plantuml HotelBookingSystem.puml
# Output: HotelBookingSystem.pngCách 3: Online
- Truy cập http://www.plantuml.com/plantuml/
- Copy nội dung file
HotelBookingSystem.puml - Paste vào editor
npm install -g docx
node generate-doc.js┌─────────────────────────────────────┐
│ Controller Layer │
│ - BookingController │
└──────────────┬──────────────────────┘
│ uses (Dependency)
↓
┌─────────────────────────────────────┐
│ Service Layer │
│ - IBookingService (Interface) │
│ - BookingService (Implementation) │
└──────────────┬──────────────────────┘
│ uses (Dependency)
↓
┌─────────────────────────────────────┐
│ Repository Layer │
│ - IBookingRepository │
│ - IRoomRepository │
└──────────────┬──────────────────────┘
│ manages
↓
┌─────────────────────────────────────┐
│ Domain Entities │
│ - Hotel, Room, RoomType │
│ - Guest, Booking, BookingStatus │
└─────────────────────────────────────┘
| Từ | Đến | Loại | Multiplicity | Giải thích |
|---|---|---|---|---|
| Hotel | Room | Composition (*--) | 1 → 0..* | Hotel quản lý Rooms. Xóa Hotel → xóa Rooms |
| Room | RoomType | Association (--) | 0..* → 1 | Nhiều Rooms có cùng type |
| Guest | Booking | Association (--) | 1 → 0..* | Guest có nhiều Bookings |
| Booking | Room | Association (--) | 0..* ↔ 1..* | Booking gồm nhiều Rooms |
| BookingService | IBookingService | Realization (<|..) | - | Service implements Interface |
| BookingController | IBookingService | Dependency (..>) | - | Controller uses Service |
- Single Responsibility: Mỗi class có một nhiệm vụ rõ ràng
- Open/Closed: Interface cho phép mở rộng mà không sửa code
- Liskov Substitution: BookingService có thể thay thế bởi bất kỳ implementation nào của IBookingService
- Interface Segregation: Interfaces nhỏ, tập trung (IBookingService, IBookingRepository)
- Dependency Inversion: Phụ thuộc vào abstractions (interfaces), không phụ thuộc vào concrete classes
- Repository Pattern: Tách logic data access
- Dependency Injection: Controller nhận IBookingService qua constructor
- Service Layer Pattern: Business logic tập trung ở Service
- hotelId: Long
- name: String
- address: String
- starRating: Integer
- phoneNumber: String
- email: String
- isActive: Boolean
- roomId: Long
- roomNumber: String
- floor: Integer
- isAvailable: Boolean
- maxOccupancy: Integer
- description: String
- guestId: Long
- firstName: String
- lastName: String
- email: String
- phoneNumber: String
- loyaltyPoints: Integer
- registrationDate: Date
- bookingId: Long
- checkInDate: Date
- checkOutDate: Date
- totalAmount: BigDecimal
- status: BookingStatus
- createdAt: Timestamp
- updatedAt: Timestamp
- UML Tool: PlantUML, StarUML
- Documentation: Node.js + docx library
- Version Control: Git
- Diagram Format: PNG, SVG
- MSSV: DE180336
- Họ tên: Nguyễn Hữu Triết
- Lớp: SE18D05
- Email: nhuutriet04@gmail.com
Bài tập thuộc về sinh viên và FPT University. Chỉ sử dụng cho mục đích học tập.
⭐ Lưu ý: File Progress_Test_2.docx chứa toàn bộ câu trả lời chi tiết cho cả 3 phần. Đây là deliverable chính của bài tập.