Как предотвратить создание репозитория вместо использованияJAVA

Программисты JAVA общаются здесь
Anonymous
Как предотвратить создание репозитория вместо использования

Сообщение Anonymous »

Я изучаю чистую арку с Java. Моя структура проекта подобна: < /p>

Код: Выделить всё

 project
|
|--domain
|   |--entity
|   |   |--Student.java
|   |--repository
|       |--StudentRepo.java (interface)
|
|--adapter
|   |--StudentRepoImpl.java
|
|--usecase
|   |--StudentUseCase.java
|
|--Main.java
domain/entity/student.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; }
}
domain/repository/studentrepo.java

Код: Выделить всё

package domain.repository;

import domain.entity.Student;
import java.util.Optional;

public interface StudentRepo {
void save(Student student);
Optional findById(String id);
}
adapter/studentrepoimpl.java

Код: Выделить всё

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
}
}
вариант использования/Case Student Case.java
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

Вернуться в «JAVA»