我正在开发基本上是代码编辑器的个人项目。想象一下标准的文件菜单,包括菜单项New,Open,Save,Save As,Save All,Close,Close All。
我坚持正确的设计。目前我有:
问题在于我无法确定哪个类/菜单命令负责哪些任务。
例如,使用File-> New菜单命令很简单 - 调用Documents.New就是这样。
但是对于File-> Open呢? Documents.Open方法需要filename作为参数。所以在调用这个方法之前我需要打开一个文件选择对话框,让用户选择文件,并为每个文件调用Documents.Open(FileName)。这个支持代码的最佳位置在哪里,在菜单命令中,重写Documents.Open并将其放在那里?
与保存操作相同。哪个负责储蓄?是Document类使用Document.Editor.SaveToFile(FileName)还是更好地在Document类中创建Save方法?中间的某个地方还需要询问用户是否要保存当前文档...
我被困住了。有什么想法吗?
编辑:编程语言是Delphi。
答案 0 :(得分:0)
恕我直言,您为Documents类添加了太多的职责。文档类的唯一责任应该是维护具有一些相关功能的文档集合(例如,处理同一文档的多个实例,检查所有文档是否已关闭,计算子项等)。
打开文档甚至创建新文档(例如,如果必须选择格式),是单独的操作,最终会生成一个新文档,然后将其添加到Documents类中。在我看来,在你准备交出Document对象之前,你甚至不应该与Documents类交互。
我希望您有一些用于表示UI以及与用户交互以获取创建或打开文件所需的所有信息的类。你应该从那里处理一切。否则,你会使用与UI相关的东西来玷污你的模型。
答案 1 :(得分:0)
您需要一个Singleton对象(DocumentManager)来管理所有文档操作。这将具有如下功能: