Назад к задачам
Junior — Senior
6

Сервис: надёжное создание и извлечение записей

Компании, где спрашивали:

МТСМТС
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Проведение ревью кода на предмет обеспечения потокобезопасности и повторного использования объекта MessageDigest внутри класса DataService.

public class DataService {
    private AccessService access;
    private DataRepository repository;
    private MessageDigest digest = get();

    public DataService(AccessService access, DataRepository repository) {
        this.access = access;
        this.repository = repository;
    }

    public Data get(String uid) {
        access.checkRead();
        return repository.get(uid);
    }

    public void create(String name) {
        access.checkWrite();
        digest = get();
        repository.save(new Data(
            HexFormat.of().formatHex(digest.digest(name.getBytes())),
            name
        ));
    }

    public static MessageDigest get() {
        try {
            return MessageDigest.getInstance("md5");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

    public record Data(String uid, String name) {}

    public interface DataRepository {
        void save(Data data);
        Data get(String uid);
    }

    public interface AccessService {
        void checkRead();
        void checkWrite();
    }
}