作者: 佚名
原文链接:http://googletesting.blogspot.tw/2009/02/with-all-sport-drug-scandals-of-late.html
由于最近的运动药物丑闻,近来已经很难找到一个好角色模型了。然而,当你的角色模型是一个领域模型(业务实体对象模型)时,你无需使用Model-View-Presenter来伪装成基于MVP应用框架。
MVP和MVC(模型-视图-控制器)很相似。如下图所示,在MVC中,表示层逻辑被控制器和视图共享。该视图通常是直接从可见的GUI框架组件派生,以模型观察和视觉呈现给用户。该控制器负责决定如何将用户事件转化为模型的更新。在MVP中,表示层逻辑被一个监督控制器完全控制,也可以被称为是表示层(监控器)。MVC MVP
视图变得被动,委托给表示层。
public CongressionalHearingView() {
testimonyWidget.addModifyListener(
new ModifyListener() {
public void modifyText(ModifyEvent e) {
presenter.onModifyTestimony();//presenter decides action to take
}
}
);
}
表示层从模型中获取数据并更新视图。
public class CongressionalHearingPresenter {
public voidonModifyTestimony() {
model.parseTestimony(view.getTestimonyText());// manipulate model
}
public voidsetWitness(Witness w) {
view.setTestimonyText(w.getTestimony());// update view
}
}
职责分离可以允许更多的模块化代码,还能使Present和View简单地单元测试。
public void testSetWitness() {
spyView = newSpyCongressionalHearingView();
presenter = newCongressionalHearingPresenter(spyView);
presenter.setWitness(newWitness("Mark McGwire", "I didn't do it"));
assertEquals(" Ididn't do it", spyView.getTestimonyText());
}