c# – 大师们真正了解他们的奴隶是什么?

c# – 大师们真正了解他们的奴隶是什么?,第1张

概述我有我的设备在主/从配置,我正在开发 WPF / MVVM应用程序. 我有一个COM对象(所有这些都实现IDevice),它代表外部设备/ Modbus网络的状态,并附加到SerialPort或Socket之类的东西.这意味着,在通过其版本和修订版识别设备之后,我调用IDevice device = DeviceManager.GetDevice(version,revision);获取表示出厂默 我有我的设备在主/从配置,我正在开发 WPF / MVVM应用程序.

我有一个COM对象(所有这些都实现IDevice),它代表外部设备/ Modbus网络的状态,并附加到SerialPort或Socket之类的东西.这意味着,在通过其版本和修订版识别设备之后,我调用IDevice device = DeviceManager.GetDevice(version,revision);获取表示出厂默认设备状态的对象.

既然我有一个IDevice,我可以调用它的API来获取List< ushort>之类的内容. GetCoreRegisters()和List< ushort> GetAllRegisters().话虽如此,在读取寄存器值后,我必须调用IDevice的API来设置值:device.SetItemValue(registeraddress,registerValue),以便更新网络另一端的设备状态.

我创建了一个处理通信层(Socket与SerialPort)的Master类型.

在我的应用程序的当前状态中,我在我的一个视图模型中调用类似下面的伪代码(在单击按钮之后):

IDevice device = null;profile = SelectedProfilemaster = MasterFactory.GetMaster(profile.name)master.open() //Connects or Opens SerialPort/Socketif(master.DeviceCheck(profile.SlaveAddress)){    keyvaluePair<ushort,ushort> info = await master.IDentifyDeviceAsync(profile.SlaveAddress);    device = DeviceManager.GetDevice(info.Key,info.Value)    initList = device.GetinitializationRegisters()    initValues = await master.ReadRegisters(profile.SlaveAddress,initList)    for(int i = 0; i < initList; i++)        device.SetRegisterValue(initList[i],initValues[i]);    allRegisters = device.GetAllRegisters();    allValues = await master.ReadRegisters(profileSlaveAddress,allRegisters)    for ... repeat}if device != null,DevicesInviewmodel.Add(device)master.Close()

我的问题是,这是正确的设计,还是我应该有一个List< IDevice> Master中的设备和识别设备后,我会做更多的事情:

device = DeviceManager.GetDevice(info.Key,info.Value);master.Add(device);// possibly add more devices if neededList<IDevice> devices = master.ReadDevices()if devices != null,DevicesInviewmodel.AddRange(devices);

所有GetRegister和SetRegisterValue逻辑都在Master中 – 这意味着Master知道IDevice的所有内容并处理配置Slave状态的逻辑.

解决方法 在理想的世界中查看模型代码非常简单.你当然不希望在其中运行长 *** 作和循环.视图模型包含用于处理来自视图的命令的逻辑,就是这样.

您的第一个示例似乎有相当多的领域知识和业务逻辑.这应该在模型中的某个地方.从我所看到的,你的大师班似乎是一个合理的地方.

要回答这个名义上的问题:大师们对他们的奴隶有很多了解,当然足以“驱使”或“使用”他们.因此,它知道IDevice中的所有内容都可以.确保它是通用的,主人不应该知道他正在处理什么类型的奴隶.

总结

以上是内存溢出为你收集整理的c# – 大师们真正了解他们的奴隶是什么?全部内容,希望文章能够帮你解决c# – 大师们真正了解他们的奴隶是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1231160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存