-
Как можно обойтись без методов 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