Код: Выделить всё
project
|
|--domain
| |--entity
| | |--Student.java
| |--repository
| |--StudentRepo.java (interface)
|
|--adapter
| |--StudentRepoImpl.java
|
|--usecase
| |--StudentUseCase.java
|
|--Main.java
Код: Выделить всё
package domain.entity;
public class Student {
private final String id;
private final String name;
public Student(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() { return id; }
public String getName() { return name; }
}
Код: Выделить всё
package domain.repository;
import domain.entity.Student;
import java.util.Optional;
public interface StudentRepo {
void save(Student student);
Optional findById(String id);
}
Код: Выделить всё
package adapter;
import domain.entity.Student;
import domain.repository.StudentRepo;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class StudentRepoImpl implements StudentRepo {
@Override
public void save(Student student) {
//code to persist into relational DB
}
@Override
public Optional findById(String id) {
//code to return student from DB
}
}
package usecase;
import domain.entity.Student;
import domain.repository.StudentRepo;
import java.util.Optional;
public class StudentUseCase {
private final StudentRepo repo;
public StudentUseCase(StudentRepo repo) {
this.repo = repo;
}
public void registerStudent(String id, String name) {
repo.save(new Student(id, name));
}
public Optional getStudent(String id) {
return repo.findById(id);
}
}
< /code>
main.java
import adapter.StudentRepoImpl;
import usecase.StudentUseCase;
import domain.entity.Student;
public class Main {
public static void main(String[] args) {
StudentRepo studentRepo = new StudentRepoImpl();
StudentUseCase useCase = new StudentUseCase(studentRepo);
useCase.registerStudent("001", "Alice");
useCase.registerStudent("002", "Bob");
useCase.getStudent("001").ifPresent(student ->
System.out.println("Found: " + student.getName())
);
}
}
< /code>
Согласно моему коду, разработчик может сохранить данные в DB, используя StudentRepo вместо USECASE. Как я могу этого избежать? Я хочу, чтобы поток был: main-> usecase-> repo-> db
Я подумал о том, чтобы сохранить Package Class Class Package и представление UsecaseFactory в том же пакете (адаптер). Тем не менее, я не уверен, соответствует ли эта структура концептуально с принципами чистой архитектуры.
заранее спасибо. < /P>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ad-usecase