Если вы собираетесь моделировать такие вещи, то вы можете взглянуть на API отражения java или c #. Это очень похоже на то, что вы описали. Класс имеет набор полей, поле имеет имя, тип и другие атрибуты, а не значение. Объект является экземпляром класса, и вы можете запросить у объекта значение указанного поля. Различные объекты одного и того же класса имеют значения для одних и тех же полей, поэтому вы можете сказать, что они имеют общие поля. Поэтому, если вы пытаетесь смоделировать ООП на основе классов, вы, вероятно, правы.
Однако это не единственный способ сделать ООП. Существует ООП на основе прототипов, который выглядит по-разному, поскольку нет классов, только объекты, поэтому объекты содержат поле со значениями, поэтому нет большой разницы, если вы говорите, что объект содержит поле, а поле имеет значение.
Итак, ответ на вопрос "Имеет ли это смысл?" Я думаю, что «да», потому что похожая вещь находится в отражении и используется широко. Если это правильно или неправильно - зависит от ваших потребностей.
UPD: относительно "значение = Passport [поле]" против "значение = Passport.Field.Value"
Я бы ввел еще один паспорт, чтобы прояснить его /
firstNameField = PassportClass.Fields["FirstName"]
myName = myPassport[firstNameField]
yourName = yourPassport[firstNameField]
предполагает, что оба паспорта имеют одинаковые поля, что имеет смысл. Наличие разных паспортов с разными полями может иметь смысл, просто другой.