AXForum  
Вернуться   AXForum > Блоги > dech
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

  1. Старый комментарий
    Аватар для Ruff

    Как можно обойтись без методов pack/unpack?

    Смущает прямолинейная проверка на несовпадение версий в финальном методе unpack(). Значит если я хочу расширить класс с переносом сохраненных в предыдущей версии значений, то ничего не получится - получу false, так как даже unpack() не смогу перекрыть. Если с минимальными правками, предлагаю:

    - добавить в Ваш currentList() параметр с номером версии:
    X++:
    public abstract container currentList(container _currentList = connull(), int _version = 0)
    - заменить жесткую проверку на передачу параметра:
    X++:
    public final boolean unpack(container _packedClass)
    {
        /*
        if (RunBase::getVersion(_packedClass) != DC_RunBase::getCurrentVersion(classidget(this)))
            return false;
        */
        
        this.currentList(condel(_packedClass, 1, 1), RunBase::getVersion(_packedClass));
    
        return true;
    }
    И теперь в наследнике можно более гибко управлять версиями:
    X++:
    public container currentList(container _currentList = connull(), int _version = 0)
    {
        #localmacro.List_v1
            checked        
        #endmacro
        
        #localmacro.CurrentList
            checked,
            qty
        #endmacro
    
        if (!prmisdefault(_currentList))
        {
            switch(_version)
            {
                case 1:
                    [#List_v1]      = _currentList;
                    break;
                    
                case 2:
                    [#CurrentList]  = _currentList;
                    break;
            }                
        }
    
        return [#CurrentList];
    }
    Запись от Ruff размещена 13.12.2016 в 20:55 Ruff is offline


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:32.