我的小部件应该接受/返回什么数据类型?

时间:2010-07-02 21:04:50

标签: python design-patterns

我正在python中构建一个表单类来生成和验证HTML表单。每个字段都有一个关联的小部件,用于定义字段的呈现方式。

创建窗口小部件时,它会以(默认)值传递,以便它知道第一次呈现时要显示的内容。提交表单后,将要求窗口小部件输入值。我将此委托给窗口小部件而不是仅仅从POST数据中删除它,因为窗口小部件可能包含多个HTML输入(想想一个月/日/年选择器)。只有小部件知道如何将这些组合成一个值。

问题是,我不知道我是否应该让小部件始终接受字符串,并始终返回字符串以保持一致性,或接受并返回与其目的一致的数据类型(即,日期选择器应该返回一个DateTime对象。)

我的表格背后的哲学是“混搭”。您可以选择所需的小部件,以及要在其上运行的验证器/格式化程序/转换器。我认为这有助于“使用字符串”并让开发人员决定数据类型的后置词,但是......我想不出一个好的但是。你预计这种方法有什么问题吗?

2 个答案:

答案 0 :(得分:2)

虽然简单地传递字符串似乎是一个有用的想法,但我认为你会发现它不会像你希望的那样有效。

考虑日期示例 - 而不是传递date对象,而是传递str格式"2010-01-01"。为了处理该数据,该类的每个用户不仅需要知道它是str代表date,而且该字符串的格式是什么。换句话说,你没有获得任何东西。更糟糕的是,您失去了将datetime对象传递到窗口小部件的能力(除非您采取额外步骤来处理该案例)。

验证器或格式化程序问题并不像您想象的那么大;您多久会想要验证一个不代表日期的字符串,就好像它是一个约会?

答案 1 :(得分:1)

这种方法非常通用,并且对字符串进行序列化应始终正常工作。您还可以将窗口小部件的状态保存到文件或通过网络发送,以便从中重新创建另一个窗口小部件。

需要考虑的一些潜在问题或方面:

  • 本地化:如何解释有关文化的字符串,哪种格式为规范格式进行比较。
  • 性能:一些转换可能很耗时,但我认为人工交互的速度要快得多。