По положению в массиве. Индекс положения можно в атрибуте задавать для надёжности и возможности расширения количества данных в будущем. Я практически так и делаю сейчас.
Я так и делал. В итоге у меня для каждого моего примитива приходилось реализовывать методы чтения\записи, так как у каждого примитива свой свойства и свои положения в массивах. Было много повторяющегося (точнее - похожего) кода. К тому-же, что делать с примитивами, у которых неизвестное количество точек?
Конечно, можно было как-то это реализовать все теми-же атрибутами, но было бы все-равно много мороки и мест, потенциально ошибочных - не тот индекс указал и все сломалось. В общем я подумал и решил остановится на использовании строковых значений.
Но как я писал выше - все зависит от архитектуры приложения. Да и от предпочтений разработчика. А что касаемо "наилучшего" варианта - то скорее всего его просто нет. Все варианты имеют плюсы и минусы