5

矢量图形应用程序(如PowerPoint或Illustrator)的最佳实践设计模式/体系结构是什么?专门用于构建复杂图形对象(父 - 子关系,形状和布局上的几何约束)上的工具 - 用户交互和操作。矢量图形编辑器的设计模式

任何想法或经验有以下:

  1. 行为 - 装饰器 - 行为堆栈/服务 - 视图 - 视图模型Microsoft

  2. 的EditPolicy - 的EditPart - 视图 - 型号GEF

回答

3

用于控制器的嵌套有限状态机。从控制器(MVC或类似的)分离视图。它一直为我工作。

更新:我有一些时间来阅读您的链接。一些背景:我一直在研究这些类型的编辑25年。我的建议,嵌套FSM作为控制器,MVC或类似的,可能被称为超级设计模式,因为你可以看到这些设计组件多年来出现在不同的设计中,每次对不同的组件使用不同的名称。微软专利的荒谬之处在于,这些想法非常古老,只是给出了新的名字。如果你看看你提供的另一个链接,你可以看到有很多相似之处(EditPart == Behavior == Finite State Machine)。

所以超级模式如下:嵌套有限状态机,如在Harel状态图中。超级国家处理跨越多个子州的共同行为;亚州处理更具体的行为。超级状态可以作为超类来实现,或者作为单独的对象实例来实现。无论哪种情况,在整个应用程序中,抽象地说你有一个当前状态,它是子状态。如果子状态不能处理输入消息,它将进入超级状态(无论是使用继承还是将消息传递给堆栈中的另一个对象)。

状态转换由输入消息触发。输入消息可能是装饰物上的用户动作(并且装饰物可能装饰了要调用的子状态的名称)。或者它可能是一个键盘事件。您可能会看到一条名为命令的输入消息。

每个状态都有一个入口方法,它执行初始化和一个退出方法,从而它反转任何未提交的更改。通常使用事务提交更改,并且一堆提交的事务形成撤消堆栈。

+0

谢谢弗兰克的彻底答案!我们按照您所说的完成了一堆bahaviors(FSM) - 如果上面的行为无法处理它们,则将事件传递给堆栈。目前我们有View和ViewModel的混合体,但是正在将它们分开,并且有严格的MVVM。 – Alfa07 2012-01-04 18:31:01

+0

2个问题:您会退出交易?在数据库中,我可以想象外键的某种失败,但图形中的典型情况是什么?你知道任何讨论这个问题的书吗? – Wout 2012-10-18 13:55:05

+0

事务退出取决于您设计的状态机。通常,按下退出键将退出事务并中止。抬起鼠标按钮将退出事务并提交。但是,可能会有其他消息导致提交或中止 - 可能是另一个消息出现冲突。玩一些你熟悉的编辑器,你可以映射状态机,如果它们被记录的话。不,我不熟悉任何书籍;我的知识来自经验。 – 2012-10-19 16:28:07