Lesson 50 • Capstone
Final Project – Task Management System
Build a complete Java application from scratch applying Clean Architecture, SOLID, and everything you've learned across 49 lessons.
Before You Start
This capstone applies concepts from the entire course. Key prerequisites: Clean Architecture (project structure), CLI Tools (user interface), IO & NIO (persistence), and Unit Testing (quality assurance).
What You'll Build
- ✅ A CLI-based Task Management System with persistent storage
- ✅ Clean Architecture: Domain → Application → Infrastructure layers
- ✅ CRUD operations with validation and error handling
- ✅ JSON file persistence (swappable to database via ports)
- ✅ Filtering, sorting, and search capabilities
- ✅ Unit tests for domain logic
Project Overview
This capstone project ties together concepts from across the entire course. You'll build a real, usable application that demonstrates mastery of Java fundamentals through advanced architecture.
| Lesson | Concept Applied | In This Project |
|---|---|---|
| OOP (9-10) | Classes, encapsulation | Task, Priority, Status entities |
| Generics (14) | Type-safe collections | Repository<T, ID> interface |
| Streams (21) | Filtering, mapping | Search and sort operations |
| Optionals (23) | Null safety | findById returns Optional |
| Exceptions (12) | Custom hierarchy | TaskNotFoundException |
| IO/NIO (33) | File operations | JSON file persistence |
| Clean Arch (49) | Ports & Adapters | Repository interface + adapters |
| CLI Tools (48) | picocli annotations | Command-line interface |
Try It: Complete Task Manager — Domain & Service
// 💡 Try modifying this code and see what happens!
// Task Management System — Domain & Application Layers
console.log("=== Task Management System ===\n");
// ─── DOMAIN LAYER ───
class TaskId {
constructor(value) { this.value = value || "task-" + Math.random().toString(36).substr(2, 8); }
toString() { return this.value; }
}
class Priority {
static LOW = new Priority("LOW", 1);
static MEDIUM = new Priority("MEDIUM", 2);
static HIGH = new Priority("HIGH", 3);
static CRITICAL = new
...Try It: Error Handling & Validation
// 💡 Try modifying this code and see what happens!
// Error handling, validation, and edge cases
console.log("=== Error Handling & Validation ===\n");
// Reuse domain classes
class TaskId {
constructor(value) { this.value = value || "task-" + Date.now(); }
}
class Priority {
static LOW = { name: "LOW", level: 1 };
static HIGH = { name: "HIGH", level: 3 };
}
class Task {
constructor(id, title, desc, priority) {
if (!title || title.trim().length === 0) throw new Error("Title cannot b
...Try It: Career Paths & Project Extensions
// 💡 Try modifying this code and see what happens!
// Career paths and project extensions
console.log("=== Career Paths & Extensions ===\n");
// 1. Career paths
console.log("1. JAVA DEVELOPER CAREER PATHS:");
let careers = [
["Backend Developer", "$70K-130K", "Spring Boot, REST APIs, databases"],
["Full-Stack Developer", "$80K-140K", "Java + React/Angular frontend"],
["Android Developer", "$75K-135K", "Kotlin/Java, Jetpack Compose"],
["Cloud/DevOps Engineer", "$90K-150K", "AWS, Docker,
...Extension Ideas
- 💡 Level 1 (Beginner) — Add due dates, overdue detection, and color-coded priority in CLI output
- 💡 Level 2 (Intermediate) — Replace InMemoryRepository with JsonFileRepository using Jackson + NIO file operations
- 💡 Level 3 (Advanced) — Add a REST API layer with Spring Boot controllers, DTOs, and validation
- 💡 Level 4 (Expert) — Add PostgreSQL persistence with JDBC/JPA, migrations, and connection pooling
- 💡 Level 5 (Master) — Split into microservices: TaskService, UserService, NotificationService with Kafka events
📋 Skills Checklist
| Category | Skills Demonstrated | Lessons |
|---|---|---|
| Fundamentals | Variables, control flow, loops, methods | 1-7 |
| OOP | Classes, inheritance, interfaces, exceptions | 8-14 |
| Advanced Java | Generics, streams, lambdas, optionals | 15-28 |
| JVM & Tools | Memory, reflection, IO, testing, build tools | 29-42 |
| Architecture | JavaFX, networking, microservices, Clean Architecture | 43-49 |
🎉 Course Complete!
Congratulations! You've completed all 50 lessons of the Java course!
You've gone from Java basics to Clean Architecture, mastering OOP, generics, streams, concurrency, networking, microservices, and professional tooling along the way. You're now equipped to build production-quality Java applications.
Keep building, keep learning, and share what you've created! 🚀
Sign up for free to track which lessons you've completed and get learning reminders.