简洁的视图模式通过将GUI类拆分为View和Presenter来增加GUI应用程序的单元测试覆盖率。如果正确完成,View变得如此简单(简陋),不需要任何测试,并且Presenter只包含易于测试或模拟的普通(非GUI)字段。
(有关此模式的详细信息,请参阅页面底部的http://martinfowler.com/eaaDev/uiArchs.html)。
我正在尝试将'简陋的视图'模式应用于聚合物应用程序,并认为我会使用最简单的方法将已发布(已观察)的字段“注入”到我的Presenter类中。但我发现,当Presenter更改已发布字段的值时,GUI不会更新。
以下是基于clickcounter
代码的示例。如您所见,计数字段被注入Presenter,单击按钮时调用方法increment()
,但更改后的值不会反映在GUI中
知道为什么这不起作用吗?
@CustomTag('click-counter')
class ClickCounter extends PolymerElement {
@published int count = 0;
MyTestedClass mytestedclass;
ClickCounter.created() : super.created() {
mytestedclass = new MyTestedClass()..count = count;
}
void increment() {
mytestedclass.increment();
}
}
class MyTestedClass{
int count = 0;
void increment() {
count++;
}
}
一种可能的解决方案是定义一个接口以将两个实例绑定在一起。然而,它看起来确实有点'笨重'
class View {
int count;
}
@CustomTag('click-counter')
class ClickCounter extends PolymerElement implements View{
@published int count = 0;
MyTestedClass mytestedclass;
ClickCounter.created() : super.created() {
mytestedclass = new MyTestedClass( this);
}
void increment() {
mytestedclass.increment();
}
void setCount( int count){
this.count = count;
}
}
class MyTestedClass{
View view;
MyTestedClass( this.view);
void increment() {
view.count++;
}
}
答案 0 :(得分:2)
您需要在MyTestedClass.count上添加@observable
注释,以便发布对它的更改。
有一天,可能不需要注释,但现在是。