From 4cd38a9afe6cfd8527fed90c357dda79ea489f95 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Fri, 6 Jun 2025 19:30:39 +0300 Subject: [PATCH] =?UTF-8?q?refactor(todo):=20=D0=B2=D0=BD=D0=B5=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=83=D0=BD=D0=B8=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0=20Reposi?= =?UTF-8?q?tory=20=D0=B8=20=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=D1=8E=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=20(close=20#46)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен интерфейс Repository для базовых CRUD-операций - Обновлён TaskRepository для наследования от Repository - Рефакторинг InMemoryTaskRepository для работы с SimpleTask - Настройка ListCommand и TaskService для прямой работы с SimpleTask - Удалено лишнее приведение типов и улучшена типобезопасность --- .../ru/kamask/pet/todo/cli/ListCommand.java | 7 +++---- .../pet/todo/repo/InMemoryTaskRepository.java | 10 +++++----- .../ru/kamask/pet/todo/repo/Repository.java | 14 ++++++++++++++ .../ru/kamask/pet/todo/repo/TaskRepository.java | 17 ++--------------- .../ru/kamask/pet/todo/service/TaskService.java | 9 ++++----- 5 files changed, 28 insertions(+), 29 deletions(-) create mode 100644 todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java b/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java index c7cb854..2e60482 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.Optional; import ru.kamask.pet.todo.model.SimpleTask; -import ru.kamask.pet.todo.model.Task; import ru.kamask.pet.todo.service.TaskService; public class ListCommand implements Command { @@ -28,7 +27,7 @@ public class ListCommand implements Command { return String.format(templateUsage, name(), "Список всех задач."); } - String formatWithTable(List tasks, String msgIfEmpty) { + String formatWithTable(List tasks, String msgIfEmpty) { String template = "%-2s | %-30s | %s\n"; var res = new StringBuilder(String.format(template, "ID", "Название задачи", "Статус")); res.append("-".repeat(50) + "\n"); @@ -36,8 +35,8 @@ public class ListCommand implements Command { if (tasks.size() == 0) return res.append("\n" + msgIfEmpty).toString(); - for (Task task : tasks) { - SimpleTask.Data data = ((SimpleTask) task).data(); + for (SimpleTask task : tasks) { + SimpleTask.Data data = task.data(); res.append(String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено")); } diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java index 47bd259..7d3312e 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java +++ b/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java @@ -6,23 +6,23 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import ru.kamask.pet.todo.model.Task; +import ru.kamask.pet.todo.model.SimpleTask; public class InMemoryTaskRepository implements TaskRepository { - private Map storage = new HashMap<>(); + private Map storage = new HashMap<>(); @Override - public void save(Task task) { + public void save(SimpleTask task) { storage.put(task.id(), task); } @Override - public Optional findById(int id) { + public Optional findById(int id) { return Optional.ofNullable(storage.get(id)); } @Override - public List findAll() { + public List findAll() { return new ArrayList<>(storage.values()); } diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java new file mode 100644 index 0000000..dcf7b37 --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java @@ -0,0 +1,14 @@ +package ru.kamask.pet.todo.repo; + +import java.util.List; +import java.util.Optional; + +import ru.kamask.pet.todo.model.Identifiable; + +public interface Repository { + void save(T obj); + Optional findById(int id); + List findAll(); + void delete(int id); + boolean has(int id); +} diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java index 3ae050d..4d32d3d 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java +++ b/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java @@ -1,18 +1,5 @@ package ru.kamask.pet.todo.repo; -import java.util.List; -import java.util.Optional; +import ru.kamask.pet.todo.model.SimpleTask; -import ru.kamask.pet.todo.model.Task; - -public interface TaskRepository { - void save(Task task); - - Optional findById(int id); - - List findAll(); - - void delete(int id); - - boolean has(int id); -} +public interface TaskRepository extends Repository {} diff --git a/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java b/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java index e8e0498..0e7e932 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java +++ b/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java @@ -3,7 +3,6 @@ package ru.kamask.pet.todo.service; import java.util.List; import java.util.Optional; -import ru.kamask.pet.todo.model.Task; import ru.kamask.pet.todo.model.SimpleTask; import ru.kamask.pet.todo.repo.TaskRepository; @@ -18,7 +17,7 @@ public class TaskService { repo.save(new SimpleTask(title)); } - public Optional getById(int id) { + public Optional getById(int id) { return repo.findById(id); } @@ -31,7 +30,7 @@ public class TaskService { return false; } - public List list() { + public List list() { return repo.findAll(); } @@ -43,9 +42,9 @@ public class TaskService { return repo.has(id); } - public List search(String query) { + public List search(String query) { return repo.findAll().stream() - .filter(task -> ((SimpleTask) task).data().title().contains(query)) + .filter(task -> task.data().title().contains(query)) .toList(); } }