model-view-controller - 矢量图形编辑器的设计模式

标签 model-view-controller design-patterns architecture editor vector-graphics

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

关于以下方面的任何想法或经验:

  • 行为-装饰器-行为堆栈/服务- View - View 模型Microsoft
  • EditPolicy - EditPart - View - 模型 GEF
  • 最佳答案

    Controller 的嵌套有限状态机。 View 与 Controller (MVC 或类似的)的分离。它总是对我有用。

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

    所以 super 模式如下:嵌套有限状态机,如哈雷尔状态图。 super 状态处理跨多个子状态的常见行为;子状态处理更具体的行为。超状态可以实现为父类(super class),也可以实现为单独的对象实例。无论哪种情况,在整个应用程序中,抽象地都有一个当前状态,即子状态。如果子状态无法处理输入消息,则它会进入 super 状态(仅使用继承或将消息传递给堆栈中的另一个对象)。

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

    每个状态都有一个入口方法,它执行初始化,还有一个导出方法,它撤消任何未提交的更改。更改通常使用事务提交,提交的事务堆栈构成撤消堆栈。

    关于model-view-controller - 矢量图形编辑器的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252287/

    相关文章:

    model-view-controller - 我可以在 asp.net core 2.0.0 中使用 razor base web 应用程序进行授权吗?

    ruby-on-rails-3 - Rails 3 - 通过 rspec 正确测试 PUT 方法

    java - 有没有一种特定的方法可以将父类(super class)的某些功能赋予某个子类?

    c++ - 设计替代?组成和结构

    c# - C# 中的泛型和约定

    c# - 如何使用 Visual Studio 2013 创建 Uml 图

    javascript - (Java NetBeans MVC) Javascript 链接文件不起作用?

    swift - 让我们让初学者清楚地了解跨多个 View Controller 的 MVC、单例和数据共享

    c++ - 从构造函数调用耗时函数

    android - 将 Activity 的实例传递给另一个对象安全吗?