2012-03-11 88 views
1

我想我正在使用OSGi服務+ DS在正確的軌道上,但是,我真的覺得自己在濫用它。要麼,要麼就是純粹的真棒。 (兩者仍然有可能)。多個OSGi服務實例和DS綁定

那麼讓我們來想象下面的應用程序:它是一個房子數據庫。我有兩個接口,House和Window。比方說,我對每個可用的配置至少有一個實現,配置爲...以及需要配置實例化的組件,並且爲了創建新實例,我只是將此配置提供給正確的pid。 (它不是工廠組件,也不是服務工廠 - 官方名稱是什麼?這是Neil出色的post about it)。

到目前爲止好,這就像一個魅力。

房子就是這樣,房子。有自己的地址,每一個都是不同的,容易通過他們的街道物業來識別。但是,Windows實例可以在房屋之間共享;它們的配置基本上是寬度和高度。

現在,這些組件還可以在0..n基數配置中相互綁定(即使您不想住在沒有窗戶的房子中)。所以每個房子都有一個窗口列表,並且對於每個窗口類型,我們知道哪個房屋擁有它(多對多關係)。

我的問題是,讓我們說兩個房子共享相同的三個窗口。我怎麼形容這個?我覺得基於財產的過濾不夠表達。我也覺得這可能不是讓框架實例化對象的正確方法,但它非常方便。

想法?我是濫用還是按照預期使用它? (我也可以使用DS來完成一半的工作:將一個房屋列表綁定到Window實例引用,或者vica,然後組件實例可以調用registerWhatever()函數在目標實例上 - 但我仍然需要以某種方式描述至少這一半)。

回答

2

很難弄清楚你在這裏問什麼,可能是因爲房屋/窗戶抽象不起作用。顯然,這不是你真的做...你只是試圖模糊或簡化真正的模型?我明白這有一些正確的理由,但House/Window聽起來更像域類而不是服務或組件。如果你真的爲數據庫的每行創建服務,那麼我認爲你濫用了服務的概念。

+0

我試圖在這裏簡化真實模型,但這與我實際嘗試做的非常接近。你說得對,就像混合域對象和服務一樣,可能我會濫用它。 因此,假設您想使用OSGi創建上述應用程序 - 您將如何構建該架構? – Zoltan 2012-03-12 13:11:13

+0

@Zoltan:如果不知道更多關於需求的信息,很難說。如果它是一個簡單的CRUD應用程序,那麼你可能會有某種HousePersister組件加載/保存來自DataSource服務的房屋域對象。 – 2012-03-12 22:34:12