2012-12-17 32 views
3

我有一個應用程序,我需要用戶Obs​​erver來解決。由於代碼實現很長,我想總結一下這個問題。使用Observer和Observable解決應用程序

我開始申請。

我有一個LogInWindow,我可以選擇司或學生。

祕書可以爲給定課程的學生添加學生,課程和成績。 學生只能看到其結果。

我需要使用Observer,這樣如果一個祕書登錄到該應用程序的一個實例中,並且學生在該應用程序的另一個實例中登錄,當祕書在該課程中爲該學生添加結果時,該學生看到立即在其名單上列出新課程及其結果。

從txt文件中讀取數據。

我的解決方案。 SecretaryWindow是觀察員 StudentWindow是觀察員 ResultRepositoryFile是可觀察對象

當我點擊Add按鈕的控制器中添加一個結果(studentName,courseName,結果)的ResultRepositoryFile。 SecretaryWindow觀察者認爲,打印一條消息並保存包含ResultRepositoryFile的txt文件。

現在StudentWindow我點擊一個RefreshButton和ResultRepositoryFile在列表中重新加載從這個窗口,顯示出新添加的Result.class

這是做正確的方式,因爲我有疑慮。

如何使用Observer同步同一應用程序的兩個實例?

感謝您的閱讀,並希望您能幫助我。

回答

3

如果您打算讓多個人同時使用您的應用程序,則應該使用數據庫而不是文本文件。如果不止一個人同時寫入文本文件,文本文件可能會損壞。

我建議像MySQL這樣的關係數據庫。

由於您的學生窗口有一個刷新按鈕,您的學生窗口將始終從數據庫中提取最新的數據。

當祕書向數據庫添加結果時,數據庫將會鎖定,並且不允許任何人訪問該結果,並且只有在添加提交到數據庫之後纔會導致結果。數據庫允許祕書在添加結果的同時訪問其他結果。

除非您想要通知學生祕書已將結果添加到數據庫,否則您不需要Observed和Observable。

編輯補充:

書記窗口觀察到的,並且可觀察的是結果,局長已添加到文本文件。

學生窗口基於Observable更新窗口。祕書窗口必須能夠根據結果的學生ID訪問學生窗口實例。

+1

+1。很好的建議使用MySQL而不是文本文件。你認爲這很重要,你錯了。這實際上比這更重要;)。另外,我認爲Observable模式的使用在這裏是強制性的(我懷疑它在要求中)。 –

+0

感謝您的建議,但不幸的是,數據是從txt文件中讀取的,Observable的使用是強制性的(分配要求)。 – Mythul

+0

感謝您的建議,但不幸的是,數據是從txt文件中讀取的,使用Observable是強制性的(分配要求)。我只是不知道如何實現StudentWindow的「更新」,以便祕書爲該學生添加新的結果時,結果自動出現在該StudentWindow上,而無需按下RefreshButton。或者需要某種刷新輸入?該應用程序有兩個主線,其中一個在其他StudentWindow上擁有SecretaryWindow,而不是txt數據文件,它們是唯一共同的東西?謝謝您的幫助。 – Mythul

1

我覺得你有點熱衷於使用觀察者設計模式。你沒有閱讀設計模式,你將如何實現它。這裏是我會解決這個問題的方式。學生將添加標誌結果並添加結果對象的關聯當爲sethratary添加結果 對於某個主題,他會發現所有登錄的學生已選擇要爲哪個祕書添加結果的主題,並簡單地標記結果標誌 爲真(顯然文本文件/數據庫也需要更新)。這是這種情況,當你不想打到DB /文件只是爲了獲取結果是否被添加,可能是 由於某些性能因素。現在當學生刷新頁面時,他可以簡單地從結果對象中取出而不是從數據庫中取出。 個人我寧願發射阿賈克斯電話(基本上是投票),而不是刷新

相關問題