Привет,
вопрос к общественности, может что-нибудь посоветуете... Казалось бы проблема должна быть известна, но что-то придумать решения у меня не получается. Итак имеем:
class Storage
{
...
}
class Global
{
Storage store;
void doFirst() - меняет store
void doSecond() - меняет store
void doThird() - меняет store
...
}
Сам код (безусловно в реале он гораздо сложнее и запутанен):
{
doFirst()
{
получить актуальную Info на основе текущего значения store
...
}
{
получить актуальную Info на основе текущего значения store
...
}
doSecond()
{
получить актуальную Info на основе текущего значения store
...
}
doThird()
{
получить актуальную Info на основе текущего значения store
...
}
{
получить актуальную Info на основе текущего значения store
...
}
{
получить актуальную Info на основе текущего значения store
...
}
{
получить актуальную Info на основе текущего значения store
...
}
}
Вопрос заключается в том, как удобно, эффективо и красиво реализовать "получить актуальную Info на основе текущего значения store"?
Вариант1.
сделать метод Info Global::collectInfo()
Но во-первых Info будет собираться несколько раз подряд, хотя store не изменилось между вызовами. Во-вторых постоянное копирование при возврате из collectInfo() (можно возвращать указатель, хотя тоже постоянно создавать-удалять Info* накладно)
Вариант2.
Поле Info info в Global, которое обновляется вызовом void Global::collectInfo() и возвращается с помощью Info Global::getInfo()
Лишний раз объект создаваться не будет, а собирать Info теперь приходится редко, что хорошо. Но вот легко можно забыть его собрать в нужный момент.
Неужели нет какого-нибудь более элегантного способа?
Дмитрий