я в настоящее время асинхронный API, где класс менеджер несет ответственность за создание других объектов класса A
, B
, C
и т.д. Создание является асинхронным, и каждый вызов функции manager.createXXX()
будет сопровождаться его обратный вызов on_createXXX_done(A& a)
.C++ Асинхронный создание объектов
Создание объектов A
, B
, C
должно быть последовательным. И типичное использование API будет включать в себя вызов создания A
и его обратного вызова, инициирующего создание B
и т. Д.
Это связано с тем, что логика создания разделена на многие функции, которые я считаю уродливыми. Кроме того, операции, которые должны выполняться после создания всех объектов, должны быть закодированы при обратном вызове последнего созданного объекта (C
), даже если нет прямой связи между этим объектом и выполняемой операцией.
Дизайн шаблона Builder на самом деле не подходит, поскольку менеджер не владеет объектами A
, B
, C
, он просто помогает создавать и возвращать их.
void on_creationA_done(A& a)
{
m_a = a;
//Trigger next creation
m_manager.createB()
}
void on_creationB_done(B& b)
{
m_b = b;
//Trigger next creation
m_manager.createC()
}
void on_creationC_done(C& c)
{
m_c = c;
//No more creations are needed. Just perform some post-creation actions
do_something() // This needs to be called once all A, B, C are created.
}
Я также проверил Folly/фьючерсы на операцию асинхронных цепей, но что бы участием обнажая библиотеки глупости через наш общественный API, не так ли?
Что было бы хорошим образцом для использования в этом случае?
Я не совсем согласен с решением. Класс менеджера может создавать больше объектов (или меньше). Допустим, у вас есть объекты из A-Z. Каждый вариант использования или сценарий может запрашивать создание любого подмножества объектов. Это делает ваше решение невозможным, так как вам нужно создать класс UseCase для каждого подмножества, поэтому N подмножеств (являющихся N = pow (2, количество объектов в наборе)) – FCR
Вам решать, нужно ли создавать отдельный прецедент классы или общие для обработки всех случаев. И это зависит от сложности каждого варианта использования и их количества. – GeorgeT