hhh

常用链接

统计

最新评论

看JFace与Swing MVC的M

最近看Eclipse RCP稍微了解一下JFace,看了它的MVC架构有感!
  
  在JFace的ContentViewer抽象中下面的三个方法反映它对待模型的思路:
  public void setContentProvider(IContentProvidercontentProvider)
  
  public void setInput(Object input)
  
  
  public void setLabelProvider(IBaseLabelProvider labelProvider)
  
  显然setInput是用来配置view背后的数据,从它的参数类型(Object)来讲应该是你的与view无关的领域模型.
  
  从这里就可以看出它和swing的根本差异.swing各种不同viewer(在swing的世界叫JComponent)背后的模型是因不同组件而不同的,模型的接口是反应了该组件特征的.
  如 JTable 背后的TableModel,TableModel接口的定义基本表达了作为一个二维表格期望获得数据的方式如TableModel中有定义这样的方法:
  Objetc getValueAt(int row,int column)
  
  在JFace中直接可以放入Object类型数据,但各种viewer不一样对于拿数据的期望也不一样,
  ContentProvider,LabelProvider解决了上述问题,不同ContentProvider定义了该viewer所期望的拿数据的接口,其实我觉得swing中的model在意义上类似于ContentProvider.
  
  其实感觉JFace的做法在尽量强制你必须构建独立于GUI的模型.
  而swing的话并没有这种侵入性,你可以直接实现viewer的模型接口如
  
  class Mymodel implenents TableModel{
  
  }
  
  也可以定义比较独立的模型然后用对象适配器模式将它们适配到viewer model上!
  
  http://www.douban.com/group/topic/1159250/

posted on 2006-10-26 18:45 hhh 阅读(1476) 评论(2)  编辑  收藏

评论

# re: 看JFace与Swing MVC的M 2006-10-26 21:12 http://www.javabbs.net.cn

http://www.javabbs.net.cn  回复  更多评论   

# re: 看JFace与Swing MVC的M 2006-10-27 08:58 ljf

感觉实现的复杂性上没什么区别,因为在SWT中IContentProvider根据不同的Control必须有不同的实现,这相当于分担了Swing中model的一部分工作  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: