You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
В оригинальном фреймворке опеределены методы readUsing/writeUsing в базовом классе, что делает его доступным для любой модели, включая произвольные объекты, например аналоги dict и list, не унаследованные от MAModel.
По факту имеется две реализации: первая, базовая, работает "через аксессор", т.е. при вызове данных методов модели, происходит доступ (чтение/запись) к значению с помощью аксессора, находящегося в переданном в метод дескрипторе.
Это не так для MAAdaptiveModel, у которой аксессоры не работают традиционным образом, то есть способ доступа к значениям при данных дескрипторе и аксессоре в общем случае зависит от типа модели.
В Smalltalk реализации чтение-запись сводится к вызову readUsing/writeUsing объекта модели, которая как раз различным образом реализуется в зависимости от модели (обычная - вызывается метод базового класса/адаптивная - переопределённый метод MAAdaptiveModel). Таким образом, доступ через аксессор не является универсальным.
В питон-реализации мы создали класс MAModel, реализующий readUsing/writeUsing по аксессору дескриптора, но у произвольных моделей, например dict(), нет таких методов readUsing/writeUsing.
Вместо этого сделан обёрточный вызов, MAModel.readUsingWrapper/MAModel.writeUsingWrapper, проверяющий наличие метода а данной переданной модели, вызывающий в первую очередь найденный метод, если есть, а если метода нет, то доступ будет сделан через аксессор дескриптора.
Возможно, стоит реализовать немного иначе, имеются такие идеи:
Реализовать доступ к MAAdaptiveModel через её Null аксессоры, тогда не будет нужно отдельное поведение для MAAdaptiveModel. Далее упростить за счёт этого стек вызовов read/write/readUsing/writeUsing.
Расширить "базовый объект" аналогично Smalltalk, если возможно.
Отказаться от методов readUsing/writeUsing у моделей (убрать их из api) и всегда пользоваться только wrapper-функциями.
The text was updated successfully, but these errors were encountered:
В оригинальном фреймворке опеределены методы readUsing/writeUsing в базовом классе, что делает его доступным для любой модели, включая произвольные объекты, например аналоги dict и list, не унаследованные от MAModel.
По факту имеется две реализации: первая, базовая, работает "через аксессор", т.е. при вызове данных методов модели, происходит доступ (чтение/запись) к значению с помощью аксессора, находящегося в переданном в метод дескрипторе.
Это не так для MAAdaptiveModel, у которой аксессоры не работают традиционным образом, то есть способ доступа к значениям при данных дескрипторе и аксессоре в общем случае зависит от типа модели.
В Smalltalk реализации чтение-запись сводится к вызову readUsing/writeUsing объекта модели, которая как раз различным образом реализуется в зависимости от модели (обычная - вызывается метод базового класса/адаптивная - переопределённый метод MAAdaptiveModel). Таким образом, доступ через аксессор не является универсальным.
В питон-реализации мы создали класс MAModel, реализующий readUsing/writeUsing по аксессору дескриптора, но у произвольных моделей, например dict(), нет таких методов readUsing/writeUsing.
Вместо этого сделан обёрточный вызов, MAModel.readUsingWrapper/MAModel.writeUsingWrapper, проверяющий наличие метода а данной переданной модели, вызывающий в первую очередь найденный метод, если есть, а если метода нет, то доступ будет сделан через аксессор дескриптора.
Возможно, стоит реализовать немного иначе, имеются такие идеи:
The text was updated successfully, but these errors were encountered: