2

我正在从事个人项目,它基本上是一个代码编辑器。想象一下带有菜单项新建、打开、保存、另存为、全部保存、关闭、全部关闭的标准文件菜单。

我坚持正确的设计。目前我有:

  • 一个 Document 类,它代表一个文档 - 代码编辑控件、选项卡栏中的相应选项卡以及各种属性,例如 Caption、Filename、IsModified 等。
  • 代表所有打开文档的 Documents 类。包含 New、Open(FileName)、...等方法

问题是我无法弄清楚哪个类/菜单命令负责哪些任务。

例如,使用 File->New 菜单命令很简单 - 调用 Documents.New 就可以了。

但是文件->打开呢?Documents.Open 方法需要文件名作为参数。所以在调用这个方法之前,我需要打开一个文件选择对话框,让用户选择文件并为每个文件调用 Documents.Open(FileName)。此支持代码的最佳位置在哪里,在菜单命令中,重写 Documents.Open 并将其放在那里?

保存操作也是如此。哪个负责储蓄?是使用 Document.Editor.SaveToFile(FileName) 的 Documents 类还是更好地在 Document 类中创建 Save 方法?中间的某个地方还需要询问用户是否要保存当前文档...

我被困住了。有任何想法吗?

编辑:编程语言是Delphi。

4

2 回答 2

0

恕我直言,您在 Documents 类中添加了太多职责。Documents 类的唯一职责应该是维护具有某些相关功能的 Documents 集合(例如,处理同一文档的多个实例,检查所有文档是否已关闭,计算子节点等)

打开一个文档甚至创建一个新文档(例如,如果您必须选择一种格式)是单独的操作,最终会产生一个新文档,然后将其添加到 Documents 类中。在我看来,在您准备好移交 Document 对象之前,您甚至不应该与 Documents 类进行交互。

我希望您有一些类来表示 UI 并与用户交互以获取创建或打开文件所需的所有信息。你应该从那里处理一切。否则,你会用 UI 相关的东西污染你的模型。

于 2010-01-21T15:54:08.707 回答
0

您需要一个管理所有文档操作的单例对象 (DocumentManager)。这将具有以下功能:

  • 获取(idList)
  • 获取新
  • 保存(文档列表)
  • 刷新
  • ETC...
于 2011-03-08T12:46:10.647 回答