最近看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上! 大家谈谈看法吧!