Technorati 标签:
WeekFood
一不小心代码就膨胀了好些,再不梳理一下,该成为难以解开的乱麻了。
- 先说说对窗体私有变量的考虑。
- 有7个模块级m_打头的变量是用来记录起止餐相关信息的。这些信息其实都是通过窗体上的2个datetimepicker和2个combobox取值计算得来的。
- 本来我是想在这4个控件各自的afterupdate事件中都写了更新这7个变量的代码,确保每次需要用到这些值时得到的都是当前最新值。
- 但是,由于我不知道怎么取消用户对dateTimePicker控件的选择,所以也就没做有效性检查(如果检查无效,也没法取消操作)。所以虽然我有办法保证那7个变量在使用时是用户最新选择的值,但并没办法保证用户的输入是有效的。
- 这样实际上每次程序员要用这些数据的时候都得进行一次有效性检查。转念一想,既然用户输入的数据未必是有效的,我又何必更新相关的数据呢?不如用的时候再更新数据、再检查有效性,这样出错信息返给用户,用户在彼情彼境下也比较容易明白是咋回事。
- 有效性检查的安排建议都放在所有用户要求的计算的第一步(比如用户click某commandbutton或某menu),而不要放在被中间调用的函数里。以避免导致重复计算。不过,在跟一次BUG的过程中,我发现有时自己写的中间过程也会改变这些值,这时再用这些值如果不先更新就会出错。所以,最好是每次用到,无论是中间过程还是用户触发的事件过程,都先更新一下值。
- 另外还有4个m_打头的变量用来记录crossform里当前活动单元格(其实是子窗体的combobox)的相关信息。因为我懒得折腾combobox的事件过程,所以这4个变量的值也都是在用到的时候才去取,用getcurcell函数。好在用的地方少,也就删加菜谱的时候需要。
- FOOD表包含单位营养量和单位字段。