A digital ordering and table management system built on ASP.NET MVC with applied software design patterns
A university project built during BS Computer Science at PAF-KIET, replacing traditional paper-based restaurant menus with a digital ordering and management system — engineered with six classical software design patterns following IEEE Std 830-1998 SRS guidelines.
Vaago digitizes the restaurant ordering experience, replacing static paper menus with an interactive system for both customers and restaurant staff.
Customer side:
- Browse the digital menu
- Add items to cart and check out
- Reserve a table
- View order history and profile
- Apply to become a chef
- View gallery, contact, and about pages
Admin side:
- Manage customers, menu, orders, reservations, and chef applications
- Full dashboard with role-based views
- Settings and configuration management
This project was built specifically to apply core Gang of Four design patterns to real controller logic — not just as theory, but as working implementations solving actual problems in the system.
| Pattern | Applied On | Purpose |
|---|---|---|
| Factory Pattern | Admin → Customer Controller | Centralizes and abstracts the creation of customer-related objects, decoupling instantiation logic from the controller |
| Observer Pattern | Admin → Order Controller | Notifies dependent components (e.g. dashboard, order status views) automatically when an order's state changes |
| Command Pattern | Checkout Controller | Encapsulates checkout actions as command objects, enabling clean execution, validation, and potential undo/redo of checkout steps |
| Repository Pattern | Menu Controller | Abstracts data access logic for menu items, decoupling business logic from direct database/Entity Framework calls |
| Strategy Pattern | Cart Controller | Allows interchangeable algorithms for cart operations (e.g. pricing/discount strategies) without changing the controller's core logic |
| Singleton Pattern | Authentication Controller | Ensures a single, shared authentication context/instance is used across the application, preventing redundant session state |
| Layer | Technology |
|---|---|
| Backend | C#, ASP.NET MVC |
| ORM | Entity Framework (Model1.edmx) |
| Database | SQL Server |
| Dependency Injection | Unity (UnityConfig) |
| Frontend | Razor Views, JavaScript, CSS |
| Architecture | MVC + Repository + Dependency Injection |
| API Layer | ASP.NET Web API (WebApiConfig) |
Vaago/
│
├── Vaago.csproj
├── Web.config
├── Global.asax
├── VaagoScripts.sql # Database schema & seed scripts
│
├── App_Start/
│ ├── BundleConfig.cs # CSS/JS bundling
│ ├── FilterConfig.cs # Global action filters
│ ├── RouteConfig.cs # URL routing configuration
│ ├── UnityConfig.cs # Dependency injection setup
│ └── WebApiConfig.cs # Web API routing
│
├── Controllers/
│ ├── AboutUsController.cs
│ ├── AuthenticationController.cs # 🔒 Singleton Pattern
│ ├── CartController.cs # 🎯 Strategy Pattern
│ ├── CheckoutController.cs # 📦 Command Pattern
│ ├── ChefapplyController.cs
│ ├── ChefreqController.cs
│ ├── ContactController.cs
│ ├── GalleryController.cs
│ ├── HomeController.cs
│ ├── MenuController.cs # 🗄️ Repository Pattern
│ ├── ReservationsController.cs
│ ├── UOrderHistoryController.cs
│ ├── UProfileController.cs
│ │
│ └── Admin/
│ ├── AdminController.cs
│ ├── DashboardController.cs
│ ├── AdminCustomersController.cs # 🏭 Factory Pattern
│ ├── AdminMenuController.cs
│ ├── AdminOrdersController.cs # 👁️ Observer Pattern
│ ├── AdminReservationController.cs
│ ├── AdminChefController.cs
│ ├── ChefsController.cs
│ └── SettingController.cs
│
├── Models/
│ ├── Account.cs
│ ├── Cart.cs
│ ├── CartItem.cs
│ ├── CheckoutModel.cs
│ ├── Chef.cs
│ ├── ChefViewModel.cs
│ ├── Login.cs
│ ├── Menu.cs
│ ├── Order.cs
│ ├── Order_Details.cs
│ ├── Reservation.cs
│ ├── Role.cs
│ ├── SiteMessage.cs
│ ├── ViewModel.cs
│ └── Model1.edmx # Entity Framework data model
│
├── Views/
│ ├── AboutUs/
│ ├── Admin/
│ ├── AdminChef/
│ ├── AdminCustomers/
│ ├── AdminReservation/
│ ├── Authentication/
│ ├── Cart/
│ ├── Checkout/
│ ├── Chefapply/
│ ├── Contact/
│ ├── Gallery/
│ └── ...
│
├── Content/ # CSS / SCSS stylesheets
├── Scripts/ # Client-side JavaScript
├── images/ # Static assets
└── Properties/
└── AssemblyInfo.cs
| Role | Capabilities |
|---|---|
| Customer | Browse menu, manage cart, checkout, reserve tables, view order history, apply as chef |
| Admin | Manage customers, menu, orders, reservations, and chef applications via dashboard |
| Chef (via application flow) | Apply through ChefapplyController, reviewed via AdminChefController |
- Visual Studio 2019+
- .NET Framework
- SQL Server (LocalDB or full instance)
- Clone the repository
git clone https://github.com/sheikhalyan/Vaago.git
- Open
Vaago.slnin Visual Studio - Restore NuGet packages
- Update the connection string in
Web.configto point to your SQL Server instance - Run
VaagoScripts.sqlagainst your database to create schema and seed data - Build and run (F5)
From the original system design (IEEE Std 830-1998 compliant SRS):
- Reliability — system must return correct order and billing results regardless of order volume
- Security — encrypted login authentication for admin access, enforced via the Singleton-based authentication context
- Maintainability — modular MVC architecture with design patterns isolating change — e.g. swapping a pricing algorithm only touches the Strategy implementation, not the Cart controller itself
- Usability — interface designed to be usable by walk-in customers with no prior training
Full system design and requirements are documented in the project's Software Requirements Specification (IEEE Std 830-1998), including use case diagrams, functional/non-functional requirements, and user characteristic analysis.
Built as a university project for the Object-Oriented Analysis and Design (OOAD) course at PAF-KIET, applying formal requirements engineering and six core design patterns to a real-world restaurant management system.
Submitted to: Dr. Muhammad Fahad
Sheikh Alyan — BS Computer Science, PAF-KIET