我正在研究如何編寫一個好的軟件系統的體系結構,並且我正在學習如何將高層組件分離爲層。 在這種情況下,我試圖使用層,以便將每個圖層建模爲黑色 框。N層發佈/訂閱者設計問題
我的架構中有4層:Presentation,Application Services, Business Logic和Domain/Persistence。對於我的問題, 我們只需要關注演示和應用服務。
應用程序服務層將包含一項服務,該服務允許跟蹤某個事件的 。演示文稿將包含幾個視圖,當事件的跟蹤模型更改時, 會動態更新。本質上, 似乎我需要一個單向變化傳播機制。
由於我試圖這些層作爲層級模型,我想門面對象之間的限制每一個Tier通信 ,並在必要時,允許層 從一個層下聚合的對象,雖然只由接口知道。
我正在用Java編程這個應用程序,因此使用的顯而易見的東西是 Observable/Observer。但是,我不喜歡 Observer界面的更新方法強制您投射對象參數。我想通過爲這個機制定義我自己的接口和類來解決 這個問題。該問題, 話,就是應用邏輯將取決於在接口上從Presentation 層,有一定沒有沒有此架構。這是一個跡象,我應該嘗試使用MVC最前沿建模 和層模型?或者, 模型中的每個視圖都有一個更好的主意,其中應用程序服務層中有一個已知的接口。 這似乎是一個不好的地方,我被卡住了。另外,我使用View-Handler設計模式來處理多個視圖。
我同意 - Observer/Observable類是在原始java規範中添加的,並且與當今一樣毫無價值。我希望他們會貶低和擺脫他們,因爲他們所做的一切都是迷惑人們,並將他們帶入錯誤的道路。 – rancidfishbreath 2010-07-07 20:23:00
這聽起來像是一個很好的解決方案。但是,我發現難以理解服務層中的基礎模型如何將信息傳播到表示層。如果演示文稿包含註冊到模型的Action Listener,那麼視圖在觸發PropertyChangeEvent時如何檢索它需要的數據? – Mike 2010-07-07 21:25:27
我認爲服務層將提供獲取表示層使用的數據的方法,但無論如何[PropertyChangeEvent](http://java.sun.com/j2se/1.4.2/docs/api/java/ beans/PropertyChangeEvent.html)具有'getPropertyName()','getOldValue()'和'getNewValue()'方法。無論是誰發佈活動,都應該填寫相關信息。你也可以基於Actions和ActionListeners,或者派生你自己的自定義事件和EventListener,這取決於給出系統最詳細的信息(我不知道)。 – 2010-07-07 21:45:43