2014-09-24 62 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)交易:您将如何处理这些数据源的交易?

无论如何,祝你好运