|
![]() |
#1 |
Участник
|
рассматривается,конечно, если поясните, как оно тут поможет. то есть, просто опишите что кэшируем и где
Я поясню: если кэшировать все три метода. то все рассчеты все равно 3 раза для каждой записи будут произведены, а не один, как описано в постановке задачи. Но, может быть, я не поняла вашу мысль .. Последний раз редактировалось IKA; 22.08.2013 в 20:06. |
|
![]() |
#2 |
Участник
|
Ну как правило кеширование методов на форме происходит как уже сказал raz при помощи Map ну или как них нибудь других объектов.
Суть что делаем : делаем общий метод на форме например, в качестве параметра курсор, мап - скажем ключ recid, ну а значение в вашем случае контейнер из трех полей. Метод работает по принципу - есть в мапе данные берем из него, нет вызываем методОбщий, записываем в мап и эти же данные берем в качестве расчета. Дальше в каждом методе priceX - вызываем данный метод, в результате будет возвращаться контейнер, ну и в методе уже определяете нужный элемент контейнера. Соответственно расчет будет выполнен один раз, каким нибудь из методов, остальные данные уже возьмутся из мапа.
__________________
Sergey Nefedov Последний раз редактировалось SRF; 22.08.2013 в 20:12. |
|
|
За это сообщение автора поблагодарили: IKA (1). |
![]() |
#3 |
Участник
|
MAP- точно, отличная мысль! Спасибо!
|
|
![]() |
#4 |
Участник
|
мап хорош только если данные не меняются пока пользователь просматривает форму туда-сюда.
вы это... поосторожнее с кэшированием. формы могут быть открытыми на экране пользователя часами. вычислять один раз вместо трех на каждый показ записи - вполне разумно. вычислять один раз вместо всех показов записи - уже как-то безрассудно. |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
![]() |
#5 |
Участник
|
2 Mazzy, а вы что предлагаете-то?
|
|
![]() |
#6 |
Участник
|
2SRF Да, извините, если вы не про cacheAddMethod, а про Map, то, конечно.
Я по умолчанию под кэшированием, встроенные механизмы подразумеваю. Спасибо |
|
![]() |
#7 |
Участник
|
а уже предложено sukhanchik'ом:
Цитата:
Сообщение от sukhanchik
![]() Для примера см классы InventOnHand, PriceDisc и т.д.
Суть: Инициализируется класс, у которого имеется несколько (в Вашем случае 3) методов, возвращающих переменные Цена1, Цена2 и Цена3. Дополнительно в классе объявляется переменная-флажок isCalculated. При расчете, который выполняется в методе МетодОбщий рассчитываются переменные Цена1, Цена2, Цена3, а также взводится флажок isCalculated. В методах, которые возвращают соответствующие переменные производится проверка - а не взведен ли флажок? Если флажок не взведен - то вызывается МетодОбщий. Если флажок взведен - то ничего не вызывается - просто возвращается соответствующая переменная. |
|
|
|