Skip to content

Java Swing Desktop Application built with a strict 3-Layer Architecture. Implements Design Patterns (Strategy, Facade, Factory) to manage media content and user communities.

License

Notifications You must be signed in to change notification settings

marcsanz-dev/ShowTVTime-Design-Patterns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎬 ShowTVTime | Desktop Media Community

Java Swing Architecture Testing

ShowTVTime is a desktop application designed to manage media collections (Movies & Series) and foster user communities. The project focuses on Software Architecture, implementing a strictly decoupled 3-Layer Architecture and standard Design Patterns to solve business requirements like dynamic filtering and group management.

📸 Application Interface

Content Discovery & Strategy Pattern

The main dashboard allows users to filter and sort media dynamically (Top 10, By IMDB Score, By Stars). This sorting logic is underpinned by the Strategy Pattern, allowing interchangeable algorithms at runtime.

Community & Access Control

Users can browse and join communities. Access to exclusive groups is gated by an Automated Admission System (Logic Challenge) that validates user knowledge before granting membership.


🏗️ Technical Architecture

This project was built to demonstrate proficiency in Object-Oriented Design (SOLID) and structural organization:

1. Layered Architecture

The code is strictly separated into three layers to ensure maintainability:

  • Presentation (View): Java Swing components handling UI events.
  • Domain (Controller/Model): Contains the business rules (Ratings, User Management).
  • Data (Persistence): Handles file-based storage, isolated from the rest of the app.

2. Design Patterns Implemented

  • ⚙️ Strategy Pattern: Applied to the Filtering Engine. It encapsulates the sorting logic (e.g., SortByIMDB, SortByRating), making the system easily extensible without modifying the main controller.
  • 🏢 Facade Pattern: Used to provide a simplified interface to the complex logic of the Domain layer, creating a clean entry point for the UI.
  • 🏭 Factory Pattern: Manages the instantiation of entities (Movies, Series, Users), keeping the creation logic centralized.
  • 🔒 Singleton Pattern: Ensures that critical controllers (like the DomainController) have only one active instance throughout the application lifecycle.

🚀 Key Features

  • Validation Logic: Automated Q&A "Gatekeeper" system for group admission.
  • Scoring System: Implementation of arithmetic mean algorithms to calculate global ratings based on user feedback.
  • Data Persistence: Custom local storage system to save state between sessions (Users, Reviews, Groups).
  • User Roles: Distinction between regular users and group members.

📂 Feature Specifications (BDD Files)

The repository includes a features/ directory containing Gherkin syntax files (.feature). These files are included to demonstrate the Requirement Engineering process and how the business rules were originally modeled.

⚠️ Note: These feature files serve as static documentation for the design process. They are not currently connected to an executable test runner in this specific version of the codebase.


💻 How to Run

  1. Clone the repository.
  2. Open the project in IntelliJ IDEA.
  3. Locate the AppMain.java file (Entry Point).
  4. Run to launch the Java Swing GUI.

About

Java Swing Desktop Application built with a strict 3-Layer Architecture. Implements Design Patterns (Strategy, Facade, Factory) to manage media content and user communities.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages