А внутре у него...
Разработка iD перевалила за экватор, и подходит время документации. John Firebaugh описал в трёх статьях устройство редактора, чтобы будущие разработчики не сломали мозг, продираясь через парадигмы d3.
Первая — про хранение данных: все элементы OSM хранятся в неизменяемых объектах, которые объединены в граф, тоже статичный. Действия, вроде удаления узла, создают новый объект и новый граф, в котором часть объектов заменена новыми версиями (или удалена), а незатронутые сделаны ссылками, чтобы не выесть всю память. Такая структура называется «Persistent data structure», и восстановление её прошлых состояний тривиально.
Во второй части Джон рассказал про режимы рисования, которые влияют на поведение некоторых элементов управления (хотя с точки зрения пользователя режимов всего два: создание и изменение). Также он описал контекстные операции над объектами, и почему их список на экране должен быть неизменен, хотя не все операции могут быть применимы.
Завершается трилогия описанием системы рендеринга карты, полностью основанной на библиотеке d3. Из него я узнал, что нынче модно эмулировать классы в javascript через функции, возвращающие функции (потому что функции — это объекты). Для рендеринга данные OSM отображаются на геометрию более высокого уровня: точки, вершины, ломаные и контуры, которые затем скармливаются d3. Элементы интерфейса редактора тоже следуют конвенциям библиотеки.
В последнем абзаце автор дал ссылку на пересказ статей в гитхабе и пообещал, что он ещё не раз поменяется.
Первая — про хранение данных: все элементы OSM хранятся в неизменяемых объектах, которые объединены в граф, тоже статичный. Действия, вроде удаления узла, создают новый объект и новый граф, в котором часть объектов заменена новыми версиями (или удалена), а незатронутые сделаны ссылками, чтобы не выесть всю память. Такая структура называется «Persistent data structure», и восстановление её прошлых состояний тривиально.
Во второй части Джон рассказал про режимы рисования, которые влияют на поведение некоторых элементов управления (хотя с точки зрения пользователя режимов всего два: создание и изменение). Также он описал контекстные операции над объектами, и почему их список на экране должен быть неизменен, хотя не все операции могут быть применимы.
Завершается трилогия описанием системы рендеринга карты, полностью основанной на библиотеке d3. Из него я узнал, что нынче модно эмулировать классы в javascript через функции, возвращающие функции (потому что функции — это объекты). Для рендеринга данные OSM отображаются на геометрию более высокого уровня: точки, вершины, ломаные и контуры, которые затем скармливаются d3. Элементы интерфейса редактора тоже следуют конвенциям библиотеки.
В последнем абзаце автор дал ссылку на пересказ статей в гитхабе и пообещал, что он ещё не раз поменяется.
Но это ж всегда так было.