2006-08-23

思考

一、传输给controller(EditPart)的model应该是谁?
这里的model目前有2个类别:IDOMNode和ElementBase。IDOMNode是纯DOM结构的一种实现,来自wtp,主要添加了INodeAdapter的接口方便扩展(请理解一下adapter的概念)。提供了所有关于DOM的操作,比如createElement, getChild, removeChild。而ElementBase则是IDOMNode的一个扩展(即继承了INodeAdapter),它拥有一个IDOMNode的成员,以及作为model的PropertySource描述实现(对应model属性的切实描述的定义)和属性变更事件支持(PropertyChangeSupport)。问题是我传给controller的model应该是IDOMNode还是ElementBase呢?我倾向于IDOMNode,它可以更清晰地表明ElementBase只是用来描述属性(这种情况下,属性等数据全存储在IDOMNode里,ElementBase只负责对属性的更改操作及描述这个属性-是list还是文本形式全由自己控制)。但是起初的设计是model面向ElementBase的(IDOMNode是后来加进来的),更改起来会有一定的麻烦。而且如何将IDOMNode的属性变更事件支持添加进来也是个待解决的问题(或许是很简单的设计哲学,不过在搞清楚具体问题领域前似乎很难,adapter能做到的事想像不到尽头的J)。
所以controller所能看到的依然是ElementBase。
二、关于model的初始化。
在上个问题结论的基础上,还有个ElementBase的成员初始化的问题。ElementBase里有个IDOMNode成员,存储node应有属性,它可以是在运行form定义程序的过程中动态产生的(类似工厂),也可以是从form定义程序加载时生成的(类似反序列化)。这两种方式怎么统一起来呢?感觉上应该跟ElementCreationFactory有关系的说~

顺带描述一下DOM Document的产生过程:
首先需要提供一个xml文件(由来请参看FormDesignEditor.getEditorInput()的注释),这个文件会先由StructuredTextEditorXML解读(来自wtp的xml editor),它会生成一个IDOMDocument对象并保存在DocumentTransferer里,然后form图形定义editor会从DocumentTransferer获取这个对象作相应的初始化:
初始化children à生成model的Element(ElementCreationFactory)à生成EditPart(controller,是由rooteditpart根据EditPartFactory生成的)à生成figure

No comments: