# Clean Architecture分層架構 ## 概念 Clean Architecture 是由 **Robert C. Martin (Uncle Bob)** 提出的軟體設計架構,旨在創建易於維護、擴展,且不依賴特定框架的系統。其核心目標是透過層級結構確保業務邏輯與外部細節(如資料庫、UI)分離。 ### 核心原則 1. **依賴規則 (Dependency Rule)** 內層的結構不應依賴外層,所有依賴必須由外向內。 2. **邊界隔離 (Boundaries)** 每層應有明確的責任範圍,透過接口隔離內外層。 3. **獨立性** 不依賴框架、不依賴資料庫、不依賴外部服務、不依賴 UI。 --- ## 層級結構 ### 1. **Entities (實體層)** - 定義核心的業務邏輯與規則。 - 與框架、資料庫無關,為純 POJO(Plain Old Java Objects)。 ### 2. **Use Cases (應用邏輯層)** - 包含具體的業務操作。 - 調用實體並執行業務規則。 ### 3. **Interface Adapters (接口適配層)** - 負責將資料轉換為適合內層或外層的格式。 ### 4. **Frameworks and Drivers (框架與驅動層)** - 最外層,包含框架、資料庫、UI。 --- ## Java 範例 以下是基於 Clean Architecture 的簡單 Java 範例。 ### 1. Entities 層 ```java public class Task { private String id; private String title; public Task(String id, String title) { this.id = id; this.title = title; } public String getId() { return id; } public String getTitle() { return title; } } ### 2. Use Cases 層 ```java public class CreateTaskUseCase { private final TaskRepository taskRepository; public CreateTaskUseCase(TaskRepository taskRepository) { this.taskRepository = taskRepository; } public void execute(String id, String title) { Task task = new Task(id, title); taskRepository.save(task); } } ``` ### 3. Interface Adapters 層 '''java public interface TaskRepository { void save(Task task); } ``` ```java public class InMemoryTaskRepository implements TaskRepository { private final Map<String, Task> database = new HashMap<>(); @Override public void save(Task task) { database.put(task.getId(), task); System.out.println("Task saved: " + task.getTitle()); } } ``` ### 4. Frameworks and Drivers 層 ```java public class Main { public static void main(String[] args) { TaskRepository taskRepository = new InMemoryTaskRepository(); CreateTaskUseCase createTaskUseCase = new CreateTaskUseCase(taskRepository); createTaskUseCase.execute("1", "Learn Clean Architecture"); } } ``` ### 參考文章 - [Link](https://ducmanhphan.github.io/2020-08-08-Clean-architecture/)