论坛首页 Java企业应用论坛

感觉TableModel应该叫TableController更合适。。。

浏览 3077 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-11-08  
连数据结构都没有定义。。。为啥叫Model呢。。。
   发表时间:2011-11-08  
。。。。。。。。你看DefaultTableModel里,定义了数据结构。
还定义了存取方式。
0 请登录后投票
   发表时间:2011-11-09   最后修改:2011-11-09
这个model是视图展示本身所需的model。
0 请登录后投票
   发表时间:2011-11-09  
fnet 写道
。。。。。。。。你看DefaultTableModel里,定义了数据结构。
还定义了存取方式。


DefaultTableModel里面的setValueAt方法
public void setValueAt(Object aValue, int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        rowVector.setElementAt(aValue, column);
        fireTableCellUpdated(row, column);
    }

这更像是一个controller的表现,因为他的两个行为:1.调用数据结构的方法改变数据结构本身,2.通知视图同步更新,都是controller的标准职责。我觉得DefaultTableModel就应该改名叫DefaultTableController,而他持有的引用dataVector才应该是model。也许是Swing的设计者为了简化类结构,故意把model和controller的行为合并了?
0 请登录后投票
   发表时间:2011-11-09  
不要急着看DefaultTableModel,直接看TableModel,定义的很清楚啊。
存取数据,以及发消息,这是很正常的Model的设计。
从接口设计上,根本看不出你所说的,1.调用数据结构的方法改变数据结构本身,2.通知视图同步更新。

再来看你说的DefaultTable,1.调用数据结构的方法改变数据结构本身,这是实现类内部的事情,而且Model不等于数据,所以它在自己内部处理数据是非常正常的。
2.通知视图同步更新,更与它无关,它只管发出消息,至于是通知视图同步更新,还是说,直接弹出对话框,它一点也不关心的。你可以试着在非Swing下用,根本不会出现视图更新。
0 请登录后投票
   发表时间:2011-11-09  
naiyi 写道
fnet 写道
。。。。。。。。你看DefaultTableModel里,定义了数据结构。
还定义了存取方式。


DefaultTableModel里面的setValueAt方法
public void setValueAt(Object aValue, int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        rowVector.setElementAt(aValue, column);
        fireTableCellUpdated(row, column);
    }

这更像是一个controller的表现,因为他的两个行为:1.调用数据结构的方法改变数据结构本身,2.通知视图同步更新,都是controller的标准职责。我觉得DefaultTableModel就应该改名叫DefaultTableController,而他持有的引用dataVector才应该是model。也许是Swing的设计者为了简化类结构,故意把model和controller的行为合并了?



您说的这两个都是model的职责,可以看写 GOF的模式,里面说过了,控制器更确切的说是输入控制器,component和里面的listener才是控制器,而TableUI是view。。
0 请登录后投票
   发表时间:2011-11-10  
naiyi 写道
fnet 写道
。。。。。。。。你看DefaultTableModel里,定义了数据结构。
还定义了存取方式。


DefaultTableModel里面的setValueAt方法
public void setValueAt(Object aValue, int row, int column) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        rowVector.setElementAt(aValue, column);
        fireTableCellUpdated(row, column);
    }

这更像是一个controller的表现,因为他的两个行为:1.调用数据结构的方法改变数据结构本身,2.通知视图同步更新,都是controller的标准职责。我觉得DefaultTableModel就应该改名叫DefaultTableController,而他持有的引用dataVector才应该是model。也许是Swing的设计者为了简化类结构,故意把model和controller的行为合并了?

你这个跟我们公司的框架代码一模一样
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics