2011-07-22 26 views
2

我正在創建一個文本編輯器。我的文本框控件是名爲EditorTextBox的子類。我的主要形式MainForm有一個Editor的實例。這是不錯的設計?

當MainForm想要加載文本文檔時,它調用Editor.LoadDocument(string path)Editor.LoadDocument來電Document.Load(string path)

保存時會發生同樣的情況:MainForm --> Editor.SaveDocument --> Document.Save

看來Editor在這裏是不必要的中間人,所以我想讓MainForm直接訪問Documenteditor.Document.Load(path)Editor仍然會創建和維護Document;它只是提供直接訪問它。

注意這將創建一個雙向關聯:Editor將有一個DocumentDocument將有一個EditorDocument使用Editor.Text並訂閱Editor.TextChanged)。

我有兩個問題:

  1. 這是好的設計?

  2. 當應用程序退出時,雙向關聯是否會產生與垃圾收集有關的任何放緩?

回答

2

您需要閱讀模型(如模型 - 視圖 - 控制器)。

通常,用戶界面應直接在模型上激活操作(在您的案例中爲Document),然後視圖(Editor)應訂閱事件並充當觀察者。

+0

嗯,我不確定這會工作,因爲Document訂閱Editor.TextChanged,並且文檔在修改文本時將其設置爲true。無論如何,我都會關注MVC。謝謝。 – Tom

+0

@Tom:內容存儲在哪裏?聽起來像你'編輯器'有責任模型和視圖混合。 –

0

讓編輯處理它的編輯任務是很好的。

傳送回主窗體靈魂的一種更好的方法是建立在編輯器事件的主要形式就可以訂閱

至於垃圾收集去,如果控制是確保引用對方只是製造商當你想擺脫他們,你實際上可以擺脫,如果兩者都擺脫了兩者。