Module Architecture
Reseñas Gastronómicas is built using a modular architecture where each module has a specific responsibility. Modules communicate through well-defined interfaces and custom events.Module Categories
Data Layer
- DataStore: Central data management
- FirebaseService: Database integration
UI Layer
- UI: Main rendering engine
- Modal: Dialog management
- Form: Form handling
- StarRating: Rating widget
- Dropdown: Autocomplete component
Feature Layer
- Search: Text search functionality
- Filters: Restaurant filtering
- Stats: Statistics and analytics
Utility Layer
- Utils: Shared utility functions
Data Layer Modules
DataStore Module
File:src/js/modules/datastore.js
Responsibility: Central data repository and state management for all review data.
Public API
Key Features
Real-time Synchronization:src/js/modules/datastore.js:26-37
Graceful Fallback:
src/js/modules/datastore.js:14-24
Dependencies
- FirebaseService: For database operations
Events Published
reviewsUpdated: Dispatched when review data changes
FirebaseService Module
File:src/js/components/firebase.js
Responsibility: Abstraction layer for all Firebase/Firestore operations.
Public API
Key Features
CRUD Operations:src/js/components/firebase.js:24-38
Real-time Listener:
src/js/components/firebase.js:68-78
Dependencies
- Firebase SDK: Global
firebaseobject - firebase-config.js: Configuration file
UI Layer Modules
UI Module
File:src/js/modules/ui.js
Responsibility: Main rendering engine for the review grid and card components.
Public API
Key Features
Initialization Sequence:src/js/modules/ui.js:9-22
Dynamic Rendering:
src/js/modules/ui.js:24-53
Dependencies
- DataStore: Data access
- Filters: Filter state
- Stats: Statistics updates
- Search: Search state
- Modal: Review details
- Utils: Helper functions
Events Subscribed
reviewsUpdated: Triggers re-render
Modal Module
File:src/js/modules/modal.js
Responsibility: Manages all modal dialogs (add/edit review, review details, confirmations).
Public API
Key Features
Edit Mode:src/js/modules/modal.js:65-114
Rich Detail View:
src/js/modules/modal.js:195-288
Dependencies
- StarRating: Rating widget integration
- Dropdown: Restaurant autocomplete
- Utils: Escape HTML and calculations
- DataStore: Delete operations
Form Module
File:src/js/modules/form.js
Responsibility: Handles form submission, validation, and data collection.
Public API
Key Features
Create and Update Logic:src/js/modules/form.js:12-68
Dependencies
- StarRating: Rating values
- DataStore: Save operations
- Utils: Date formatting
- Modal: Close modal after save
StarRating Module
File:src/js/modules/starrating.js
Responsibility: Interactive 10-star rating component for two reviewers.
Public API
Key Features
src/js/modules/starrating.js:4-15
Dependencies
- None (standalone component)
Dropdown Module
File:src/js/modules/dropdown.js
Responsibility: Autocomplete dropdown for restaurant selection.
Public API
Key Features
Dynamic Filtering:src/js/modules/dropdown.js:69-89
Dependencies
- DataStore: Restaurant list
- Utils: HTML escaping
Feature Layer Modules
Search Module
File:src/js/modules/search.js
Responsibility: Full-text search across reviews.
Public API
Key Features
src/js/modules/search.js:14-25
Dependencies
- UI: Trigger re-render
Filters Module
File:src/js/modules/filters.js
Responsibility: Filter reviews by restaurant.
Public API
Key Features
src/js/modules/filters.js:12-27
Dependencies
- DataStore: Restaurant list
- Utils: HTML escaping
- UI: Trigger re-render
Stats Module
File:src/js/modules/stats.js
Responsibility: Calculate and display statistics (best dish, worst dish, recent highlights).
Public API
Key Features
Statistical Calculations:src/js/modules/stats.js:86-126
Dependencies
- DataStore: Review data
- Utils: Average calculation and date parsing
Utility Layer Modules
Utils Module
File:src/js/modules/utils.js
Responsibility: Shared utility functions used across the application.
Public API
Key Features
XSS Prevention:src/js/modules/utils.js:13-17
Date Handling:
src/js/modules/utils.js:8-22
Dependencies
- None (pure utility functions)
Module Dependency Graph
Inter-Module Communication
Method 1: Direct Imports
Modules import and call methods directly:Method 2: Custom Events
Modules broadcast state changes:Method 3: Shared State
Modules read shared state properties:Best Practices
- Single Responsibility: Each module handles one concern
- Minimal Dependencies: Modules only import what they need
- Event-Driven Updates: Use events for loose coupling
- Immutable Operations: Don’t mutate imported state directly
- Error Handling: Always wrap async operations in try-catch
- XSS Prevention: Always escape user input with
Utils.escapeHtml()
Next Steps
- Review Application Architecture for high-level design
- Explore Firebase Integration for database details
- Check individual API references for detailed method documentation