Сбор и хранение информации из объемного объекта
От: borech Россия  
Дата: 15.09.06 16:36
Оценка:
Привет,
вопрос к общественности, может что-нибудь посоветуете... Казалось бы проблема должна быть известна, но что-то придумать решения у меня не получается. Итак имеем:

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 теперь приходится редко, что хорошо. Но вот легко можно забыть его собрать в нужный момент.

Неужели нет какого-нибудь более элегантного способа?

Дмитрий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.