8.6 duplicate observed data(复制“被监视数据”)

你有一些领域数据置于GUI控件中,而领域函数需要访问这些数据。

将该数据复制到一个领域对象中。建立一个observer模式;用以同步领域对象和GUI对象内的重复数据。

动机:

一个分层良好的系统,应该将处理用户界面和处理业务逻辑的代码分开。

尽管可以轻松地将“行为”划分到不同部位,“数据”却往往不能如此。同一项数据有可能既需要内嵌于GUI控件,也需要保存于领域模型内。

如果遇到的代码是以两层方式开发,业务逻辑被内嵌于用户界面之中,你就有必要将行为分离出来。其中的主要工作就是函数的分解和搬迁。但数据就不同了:你不能仅仅只是移动数据,必须将它复制到新的对象中,并提供相应的同步机制。

做法:

修改展现类,使其成为领域类的observer

=》如果尚未有领域类,就建立一个。

=》如果没有“从展现类到领域类”的关联,就将领域类保存于展现类的一个字段中。

针对GUI类中的领域数据,使用self encapsulate field。

在事件处理函数中调用设值函数,直接更新GUI组件。

=》在事件处理函数中放一个设值函数,利用它将GUI组件更新为领域数据的当前值。当然这样其实没有必要,你只不过是拿它的值设定它自己。但是这样使用设置函数,便是允许其中的任何动作得以于日后被执行起来。

在领域类中定义数据及其相关访问函数。

=》确保领域类中的设置函数能够触发observer模式的通报机制。

=》对于被观察的数据,在领域类中使用与展现类所用的相同类型来保存。

修改展现类中的访问函数,将它们的操作对象改为领域对象。

修改observer的update(),使其从相应的领域对象中将所需数据复制给







阅读更多
文章标签: 领域模型 工作
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭