作法(Mechanics)
- 修改presentation class,使其成为domain class的Observer[GoF]。
- ==》如果尚未有domain class,就建立一个。
- ==》如果没有[从presentation class到domain class]的关联性(link),就将domain class保存于presentation class的一个值域中。
- 针对GUI class内的domain data,使用Self Encapsulate Field(171)。
- 编译,测试。
- 在事件处理函数(event handler)中加上对设值函数(setter)的调用,以[直接访问方式]更新GUI组件。
- ==》在事件处理函数中放一个设值函数(setter),利用它将GUI组件更新为domain data的当前值。当然这其实没有必要,你只不过是拿它的值设定它自己。但是这样使用setter,便是允许其中的任何动作得以于日后被执行起来,这是这一步骤的意义所在。
- ==》进行这个改变时,对于组件,不要使用取值函数(getter),应该采取[直接取用]方式,因为稍后我们将修改取值函数(getter),使其从domain object(而非GUI组件)取值。设值函数(setter)也将遭受类似修改。
- ==》确保测试代码能够触发新添加的事件处理(event handling)机制。
- 编译,测试。
- 在domain class中定义数据及其相关访问函数(accessors)。
- ==》确保domain class中的设值函数(setter)能够触发Observer模式的通报机制(notify mechanism)。
- ==》对于被观察(被监视)的数据,在domain class中使用[与presentation class所用的相同型别](通常是字符串)来保存。后续重构中你可以自由改变这个数据型别。
- 修改presentation class中的访问函数(accessors),将它们的操作对象改为domain object(而非GUI组件)。
- 修改observer的update(),使其从相应的domain object中将所需数据拷贝给GUI组件。
- 编译,测试。
|