model-view-controller - 在 MVC 中通知观察者的最佳方式?

标签 model-view-controller design-patterns

假设您在某个 View 感兴趣的模型中有 5 或 6 个变量,您是否为每个变量编写了不同的函数,例如

int a;
int b;
int c;

void setA( newA ) {
   a = newA;
   notifyAObservers();
}

void setB( newB ) {
   b = newB;
   notifyBObservers();
}

void setC( newC ) {
   b = newC;
   notifyCObservers();
}

或者你只有一个通知方法并浪费一点 CPU 时间

即而不是 notifyAObservers 和 notifyBObservers,你只有 notifyObservers

最佳答案

我相信traditional approach就是通知所有的观察者,让他们去处理。这是因为您不知道哪些观察者正在观察哪些变量——您只知道他们希望在某些事情发生变化时得到通知。但是,如果您确实知道哪些观察者正在观察哪些变量,并且性能很关键,那么您也许能够像现有的那样做一些事情。

在传统的观察者模式中,观察者实现了一个 update() 方法,当发生变化时 Controller 会调用该方法。 Observables(数据模型)将有一个 notifyObservers() 方法,该方法遍历观察者并调用它们的 update() 方法。然后,Observers 得到他们需要的任何东西并且 View 更新。

然而,每当我实现了观察者模式时,我只是保留一个观察者列表并通知他们所有人。这样一来,我只有一个观察者列表,类的其余部分以及不同的观察者都可以更改,而无需我对可观察类通知进行任何更改。

关于model-view-controller - 在 MVC 中通知观察者的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1246093/

相关文章:

java - 根据 http header 中的应用程序类型传递应用程序数据对象的最佳工厂模式

wpf - 如何在 View 模型中使用第三方控件?

ruby - 如何使用 Ruby 中的单例设计模式创建类?

.net - 领域驱动设计示例(特别是 .NET 重点)

java - Spring MVC 域对象处理最佳实践

asp.net - 在 ASP.net core 中,如何在返回 View 时重新加载 _layout 页面()

php - 在 View codeigniter 中调用模型函数

iphone - 如果你有很多静态数据,如何遵循 MVC?

ios - viewDidLoad() 在 prepareForSegue() 完成之前被调用 : Swift

cocoa - enum 和 NSDictionary 定义 Cocoa 中有效元素的列表