Какой тип данных должны принимать / возвращать мои виджеты? - PullRequest
2 голосов
/ 03 июля 2010

Я создаю класс формы в Python для создания и проверки HTML-форм. Каждое поле имеет связанный виджет, который определяет способ визуализации поля.

Когда виджет создан, он передается в значении (по умолчанию), чтобы он знал, что отображать при первом отображении. После отправки формы у виджета запрашивается значение. Я делегирую это виджету, а не просто извлекаю его из данных POST, потому что виджет может состоять из нескольких входов HTML (например, селектор месяца / дня / года). Только виджет знает, как объединить их в одно значение.

Проблема в том, Я не знаю, должен ли виджет всегда принимать строку и всегда возвращать строку для согласованности, или принимать и возвращать тип данных в соответствии с его назначением (т.е. вероятно, селектор даты должен возвращать объект DateTime).

Философия, лежащая в основе моего урока, - это «смешивать и сочетать». Вы выбираете, какой виджет вы хотите, и какие валидаторы / форматеры / конвертеры вы хотите запустить на нем. Что, я полагаю, подойдет для «использования строк» ​​и позволит разработчику определиться с типом данных после слов, но ... я не могу придумать хорошего, но. Предвидите ли вы какие-либо проблемы с этим подходом?

Ответы [ 2 ]

2 голосов
/ 03 июля 2010

Хотя простая передача строк кажется полезной идеей, я думаю, вы обнаружите, что она работает не так хорошо, как вы могли бы надеяться.

Подумайте о примере с датой - вместо того, чтобы передавать объект date, вместо этого вы передаете str в формате "2010-01-01". Чтобы работать с этими данными, каждый пользователь класса должен знать не только, что это str, который представляет date, но и каков формат этой строки. Другими словами, вы ничего не получили. Хуже того, вы теряете возможность передавать объект datetime в виджет (если вы не предпримете дополнительных действий для решения этого случая).

Проблема с валидатором или форматером не так сложна, как вы думаете; как часто вы хотите проверять строку, которая не представляет дату, как если бы она была датой?

1 голос
/ 03 июля 2010

Этот подход достаточно универсален, и сериализация в и из строк всегда должна работать нормально. Вы также можете сохранить состояние виджета в файл или отправить его по сети для воссоздания другого виджета из него.

Некоторые потенциальные проблемы или аспекты для рассмотрения:

  • Локализация: как интерпретировать строку, касающуюся культуры, формат которой канонический формат для сравнений.
  • Производительность: некоторые преобразования могут занимать много времени, но я предполагаю, что для взаимодействия с человеком это будет достаточно быстро.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...