问题描述
当我想为抽象类编写单元测试(测试常用方法)时,我的问题开始了,而不是我发现更喜欢组合而不是继承(我可以对正在更改“连接”的部分使用模拟")
现在我很难想出一些正确的设计,所以有人可以帮我吗?
我的全部代码都可以在 here 找到,但为了简单起见,我将在这里简短地描述它。我有 PlcData
类,它表示我需要从 PLC 读取的变量的当前状态。 PlcData
代表 观察者模式 中的主题,我使用不同的类订阅它(我还需要知道确切的属性已更改,这就是 PlcData
实现“源”的原因我需要观察的每个属性的接口,我还需要在属性更改时获取所有数据,因为基于我在数据库中搜索的其他一些属性 - 这就是为什么我在任何属性更改时发送整个 PlcData
)。我想让 PlcData
的观察者独立于连接(PlcData
如何从 PLC 读取/写入变量)。
我想实现这样的事情(很多程序员证实我这是正确的方法),其中 PlcData
是具体类(我将来也可以使用它的接口)并且连接是作为 PlcData
的属性:
我的问题是我不知道如何正确实现这一点。 “Connection”的每个具体类将使用一些库,并且这里会有很多细节,但它应该处理订阅、读取、写入那些“重要”变量(serialNumber、measuredCurve ... - 在实际代码中我有更多其中,但它们是完全给定的)。但是我希望这对于 PlcData
“user”是不可见的,所以他只需调用一些工厂方法 PlcDataProvider.getPlcData()
并且他将获得具有初始化连接的 PlcData 实例,他只需订阅他需要的变量(或写入这些变量,PlcData
类将处理如何通过“连接”接口将它们发送到 PLC。
我最大的问题
-
我不知道如何正确地使
Connection
更新PlcData
以及如何通过它写入真实的 PLC 变量(我真的在这里迷路了,我最终得到了三个每个属性的方法(writeSerialNumber、readSerialNumber、subscribeToSerialNumber 和Connection
需要跟踪PlcData
) -
如何使用一些工厂正确创建PlcData
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)