2014-09-24 96 views
0

我處於下一個任務的設計階段,我不確定我的想法是否正確,因爲我不太確定如何在UML圖中實現它。我很感激你對此的評論。類之間的共享列表

基本上,重點是我將有一個讀者和一個作家類。它們將用於讀取和寫入某個數據源的值,即數據庫或modbus PLC。這些值中的每一個都由我的數據模型和數據源中的唯一標識標識。讀取操作將通過發送其所有ID並查詢其值來定期執行所有值。每次在我的數據模型中這些值中的一個發生更改時,都會執行寫入操作,並且需要將其發送到此數據源。

我的想法是爲讀者和包含數據模型中所有對象的作者提供共享列表。例如:

class ExternalObject { 

    private String id; 
    private String transactionId; 
    private String value; 
    private String lastValue; 

} 

將會有一個控制器類,當在我的數據模型的值的變化將在正確的對象的值屬性,那麼Writer類寫,也就是通過的所有元素進行迭代該列表會一直顯示該值不爲空併發送它。之後,它會將其重置爲空並將其設置爲最後一個值。 此外,Reader類始終從此數據源讀取值,當發現讀取的值與lastValue不同時,它會將其保存在我的數據模型中。

現在我想你已經明白了。當沒有與數據源連接或發送初始值或讀取它們時,當然會有更多的邏輯來重置值,但這是另一回事。

我的問題是這個共享列表。我不確定在面向對象設計中是否可以共享這樣的列表或對象。如果這很好,那麼接下來就是我不知道如何在UML圖中對它進行建模,以表明一個對象在兩個類之間共享。

任何想法都非常受歡迎。

+0

是否有其他更改數據源?因爲否則週期性地從數據源讀取數據不會給你任何新的信息,因爲它已經在你的數據模型中。 – Soana 2014-09-24 11:04:07

+0

是的,數據源中的值隨其他應用程序也可能寫入其中而變化。知道變化的唯一方法是定期查詢所有不同的值。 – 2014-09-24 11:34:05

回答

0

不幸的是,這不是一個完整的答案,因爲我從來沒有實現像在工業級任何東西,但有幾個注意事項浮現在腦海中:

1)新的ID:讀者投票爲它知道的ID - 但那麼由外部進程插入的新ID呢?

2)性能:您是否控制架構,並且您的機器時鐘是否在一定的合理範圍內同步?如果是這樣,也許你可以在每個對象上都有一個時間戳,並且讀者可以只刷新自上次刷新後編輯/插入的對象(加上一些安全邊距)? 3)列表:我不會說「面向對象的禁止列表共享」,但爲了方便起見,您可能會考慮使用包裝數據結構以及搜索/更新/插入/刪除的方法。因此,您可以隨意輕鬆替換數據結構,例如到地圖。

4)交易:您將如何處理這些數據源的交易?

無論如何,祝你好運