如何面对包含可观察字段的可观察对象

如何面对包含可观察字段的可观察对象

问题描述:

我需要关于MVC和Observer-Pattern的提示。如何面对包含可观察字段的可观察对象

例如,模型包含类“地址”和“人”。 Address类包含字段street:String,zipcode:String,location:String。而Person类包含字段名称:String,firstName:String,address:Address。

我到目前为止的方法看起来像这样: 地址和人员都是可观察的。如果其中一个调用者被调用,我将验证当前值和新值是否不同。只有在这种情况下才会触发更新事件。该事件包含来源,已更改字段的名称,旧值和新值。

该视图的类包含显示和编辑个人信息的文本字段:名称,名字,街道,邮编,位置。它知道Person模型,并且是该人的订阅观察者。所以它从人物对象获取更新事件。

我的问题涉及人类中地址类型的地址字段,因为地址是独立可见的。 如果视图在设置新地址时从人员处获取更新事件,则可以更新视图中所有与地址相关的字段。 但是如果地址的一个字段发生了变化呢?视图是否也应该从地址注册更新事件?

任何有关常见设计方法的提示将不胜感激。 问候。

IMO视图可以注册为许多模型对象的观察者,因为它希望。总的来说,我不知道有什么理由,为什么一个观察者应该仅限于观察一个单一的Observable。

我看到的唯一问题是,由于观察者只能实现一次接口,所以不同观察者会使用相同的通知方法,这会使处理更加尴尬。此外,如果一个Observable是另一个Observable的成员,则更新Observer注册的逻辑变得更加棘手。

我使用的JFace数据绑定经常和他们做这样说:

您创建了一个模型元素和GUI元素之间的结合。为了简单起见,我们在模型中创建一个字符串字段,在GUI上创建对Text对象(Textfield)的绑定。因此,只要模型中的值发生更改,就会触发一个事件,该值可能会被验证并转换,并通知Text小部件。绑定在另一个方向上是相同的:在GUI上的每个编辑中,事件被触发,验证和转换(如果需要的话)可观察模型字段。

因此,典型情况是模型字段和编辑器组件之间存在1:1关系。