一些领域数据置身于GUI控件中,而领域函数需要访问这些数据
重构:将该数据复制到一个领域对象中。建立一个Observer 模式,可以同步领域对象和GUI 对象内的重复数据。
动机
一个分层良好的系统,应该将处理用户界面和处理业务逻辑的代码分开。之所以这样做,有以下2点原因:
1、可能需要使用不同的用户界面来表现相同的业务逻辑,如果同时承担两种责任,用户界面会变得过分复杂;
2、与GUI 隔离之后,领域对象的维护和演化都会更容易。
尽管可以轻松地将“行为”划分到不同部位,“数据”却往往不能如此。同一项数据有可能既需要内嵌于GUI 控件,也需要保存于领域模型里。自从MVC 模式出现后,用户界面框架都使用多层系统来提供某种机制,使你不但可以提供这类数据,并保持它们同步。
如果你遇到的代码是以两层方式开发,业务逻辑被内嵌于用户界面之中,你就有必要将行为分离出来。其中的主要工作就是函数的分解和搬移。但数据就不同了:你不能仅仅只是移动数据,必须将它复制到新的对象中,并提供相应的同步机制。