У меня есть класс, в котором некоторые операции зависят друг от друга.
class MyFile{
private String uploadedUri;
public void upload(){
// http upload
}
public void asyncUpload(){
// http async upload
}
public void convert(){
//http call to convert
}
public void convertAsync(){
//http call to convert, but async
}
public void extract(){
//http call to convert, but async
}
public void extractAsync(){
//http call to convert, but async
}
// some other operations
}
Теперь моя операция преобразования зависит от загрузки, она действует только на загруженный URI.В преобразовании синхронизации я проверяю, установлен ли uri.Если нет, я сначала загрузю его.Точно так же в классе есть другие методы (например, extract), которые зависят от метода convert, то есть, если преобразование не выполнено, они попытаются преобразовать его.Это делается для того, чтобы вызывающий метод не беспокоился о порядке.
Моя проблема с асинхронными методами.Когда последовательность методов выглядит следующим образом:
MyFile myfile = new MyFile();
myfile.convertAsync()
myfile.extractAsync()
Внутри extractAsync (), я не могу быть уверен, что преобразование произошло, поскольку оно происходит в отдельном потоке.Таким образом, извлечение также запустит преобразование, что приведет к преобразованию файла.Та же проблема возникает в любом из других зависимых методов asycn.
Если я возвращаю CompletableFuture из асинхронных методов и заставляю пользователя объединять операции в цепочку, чтобы извлечение вызывалось только после завершения преобразования, пользователь должен знать порядок методов, что противоречит моей целии отличается от реализации синхронизации тех же методов.
Я хочу знать, является ли это правильным способом обработки зависимых операций в классе домена согласно DDD.Если да, как справиться с этим сценарием?