我正在编写一个轻量级的 IDE。我为这个任务选择了 Ruby+Gtk2。我已经有了它的最小原型,但是现在,大部分代码都在我的窗口类中。我很快就会开始研究“真正的交易”,但我想知道我应该使用什么设计模式。我也在计划插件支持,以便应用程序可扩展。欢迎任何想法,但请讨论您的选择。
请记住,这是一种脚本语言。我不确定 Java 的所有设计模式是否都适用于此。
我正在编写一个轻量级的 IDE。我为这个任务选择了 Ruby+Gtk2。我已经有了它的最小原型,但是现在,大部分代码都在我的窗口类中。我很快就会开始研究“真正的交易”,但我想知道我应该使用什么设计模式。我也在计划插件支持,以便应用程序可扩展。欢迎任何想法,但请讨论您的选择。
请记住,这是一种脚本语言。我不确定 Java 的所有设计模式是否都适用于此。
设计模式是常见问题的解决方案。你有什么问题?在咨询工作中,我们经常看到当有人开始说“好吧,这是我的想法。我可以使用什么设计模式?”时,架构很快就会变得过于复杂。
与其寻找您可能使用的设计模式,不如阅读设计模式(我讨厌链接到 Wikipedia,但他们的文章确实有一个很好的列表,至少可以让您开始其他搜索),然后在您使用它们时应用它们提出一个符合他们标准的问题。
至于在您的窗口类中有很多代码,这可能适合您的应用程序,或者您可能希望查看类似于松散 MVC 模式的东西。通常对于 GUI 编程,严格的 MVC 会过于严格,并且需要太多工作才能实现“真正的”关注点分离。
没有设计模式可以解决许多常见问题,但这并不意味着解决方案是对还是错。例如,插件支持通常仅通过提供插件接口或插件可以响应的一组事件来提供。或者,您可以查看适配器模式。
我不确定这是否会有很大帮助,但是“ Ruby 中的设计模式”一书谈到了 ruby 中的设计模式以及它们与 Java 的设计模式有何不同。
另外,不要忘记检查现有的 IDE。他们用了什么?
由于编辑将是您的 IDE 的一个组件,因此您应该检查实际的开源编辑器。
只是为了澄清一个可能的误解:您是否指的是UI 模式(而不是软件架构设计模式)?你的问题在我看来这样更有意义。
设计 ruby GUI 应用程序的最佳方式是使用 visualruby:
您可以使您的 GUI 与您的类完全分开。例如,如果你想为下面的类创建一个 GUI,你可以很容易地做到,而不会打扰它:
class DataObject
def initialize(name, address, email, phone)
@name = name
@address = address
@email = email
@phone = phone
end
end
您可以通过继承该类并添加 GUI 来为该类创建一个 GUI:
class DataObjectGUI < DataObject
include GladeGUI
def show()
load_glade(__FILE__) #loads glade/DataObjectGUI.glade into @builder
set_glade_all() #populates glade controls with insance variables from DataObject
show_window()
end
end
GladeGUI 界面包含所有的 GUI 魔法。load_glade() 方法将加载文件 DataObject.glade。这是一个包含 Gtk::EntryBoxes 名称、姓名、地址、电话和电子邮件的林间空地表格。表格将显示在屏幕上,所有字段均已填写。
显然 show_window() 将使窗口出现在屏幕上。当您单击“x”按钮时,GladeGUI 会自动调用销毁窗口。
这种设计模式可以用于任何类。一个很好的例子是如果你有一个 ActiveRecord 类,并且你想在屏幕上显示记录。你只是像上面那样子类化,它是可编辑和可保存的。
此示例取自 visualruby.net 上的示例项目之一。