2

我需要關於MVC和Observer-Pattern的提示。如何面對包含可觀察字段的可觀察對象

例如,模型包含類「地址」和「人」。 Address類包含字段street:String,zipcode:String,location:String。而Person類包含字段名稱:String,firstName:String,address:Address。

我到目前爲止的方法看起來像這樣: 地址和人員都是可觀察的。如果其中一個調用者被調用,我將驗證當前值和新值是否不同。只有在這種情況下才會觸發更新事件。該事件包含來源,已更改字段的名稱,舊值和新值。

該視圖的類包含顯示和編輯個人信息的文本字段:名稱,名字,街道,郵編,位置。它知道Person模型,並且是該人的訂閱觀察者。所以它從人物對象獲取更新事件。

我的問題涉及人類中地址類型的地址字段,因爲地址是獨立可見的。 如果視圖在設置新地址時從人員處獲取更新事件,則可以更新視圖中所有與地址相關的字段。 但是如果地址的一個字段發生了變化呢?視圖是否也應該從地址註冊更新事件?

任何有關常見設計方法的提示將不勝感激。 問候。

回答

1

IMO視圖可以註冊爲許多模型對象的觀察者,因爲它希望。總的來說,我不知道有什麼理由,爲什麼一個觀察者應該僅限於觀察一個單一的Observable。

我看到的唯一問題是,由於觀察者只能實現一次接口,所以不同觀察者會使用相同的通知方法,這會使處理更加尷尬。此外,如果一個Observable是另一個Observable的成員,則更新Observer註冊的邏輯變得更加棘手。

0

我使用的JFace數據綁定經常和他們做這樣說:

您創建了一個模型元素和GUI元素之間的結合。爲了簡單起見,我們在模型中創建一個字符串字段,在GUI上創建對Text對象(Textfield)的綁定。因此,只要模型中的值發生更改,就會觸發一個事件,該值可能會被驗證並轉換,並通知Text小部件。綁定在另一個方向上是相同的:在GUI上的每個編輯中,事件被觸發,驗證和轉換(如果需要的話)可觀察模型字段。

因此,典型情況是模型字段和編輯器組件之間存在1:1關係。