用于建模具有任意属性的联网设备的最佳 API 以供学习?

Posted

技术标签:

【中文标题】用于建模具有任意属性的联网设备的最佳 API 以供学习?【英文标题】:Best API for modeling networked devices with arbitrary attributes to learn from? 【发布时间】:2010-12-19 10:48:24 【问题描述】:

我需要设计一个新的 API 来模拟具有大量属性的联网设备,这些属性根据设备的类型而变化很大。属性集不是完全任意的,它是一大组已知属性。也就是说,新设备带来了新属性,因此情况永远不会完全解决。

网络设备本身总是来来去去,因此这是 API 设计的核心部分。此外,最好通过观察者模式的一些变体来获取属性/属性集的更新。

注意:我不是在谈论网络管理,尽管这听起来可能是这样。也就是说,这些系统上的 API 可能非常适合/值得一看。

所以我的问题是,您知道开源世界中有哪些好的 API,我可以从中学习并从中获得一些灵感吗?

系统将基于 Java,因此示例最好来自密切相关的语言,例如Java(当然 :))、C#、Scala 和其他类似的静态类型语言。

【问题讨论】:

您对哪些属性感兴趣?例子?您打算如何使用这些模型? 这听起来像是一个展示 Scala 特性灵活性的好项目。定义一些核心对象并混合适当定义的特征,直到您拥有特定设备所需的模型... 可能是。不幸的是,这将存在于一个用 Java 编写的大型遗留系统的中心(这将是一个重大的重新设计)。我所追求的基本上是替换核心域模型。引入一种新语言似乎是一场灾难。 【参考方案1】:

我可能会查看 LDAP/ActiveDirectory/ADAM(User Mode Active Directory) 。 . . 博学的穴居人

【讨论】:

【参考方案2】:

我不确定您的 API 究竟打算做什么,但我猜测由于网络设备“一直来来去去”并且您想使用观察者模式,因此您正在寻找可以获取网络上当前状态的更新。

你看过SLP吗?它是一个发布/订阅协议,可以做你想做的事:它允许网络设备通过网络广播它们的存在和属性,也可以监听其他人。它通过 TCP 和 UDP(单播和多播)工作。

周围有几个 java 实现(例如 jslp),但我从未对它们完全满意(所以我最终编写了自己的)。就 C# 而言,我很难找到一个。

【讨论】:

谢谢,我会检查 API(尽管您已经提到它并不令人满意 :-))。是的,我在问题中没有提到的是协议已经存在并且还有一个 API。协议不能(永远)改变,但我们拥有代表设备的 API,所以这是我的重点,也是我想要显着改进的地方。 SLP 更多的是让设备代表自己,而不是真正相互通信。如果您有兴趣编写自己的子集,请查看 RFC:rfc-editor.org/rfc/rfc2608.txt【参考方案3】:

我不能完全理解你的问题,但我会试一试。

您是否正在寻找一种方法来允许设备在网络上公开其属性?如果是这样,除非您编写现在理解与设备交互的代码,否则真的没有什么好方法。在你有了类似的东西之后,你所需要的只是一个类,它以你喜欢的某种类型的数据结构保存属性数据。为了进行更新,您可能需要定期轮询设备,除非它们能够在属性更改时进行报告:

Dictionary<string, Dictionary<string, string>> deviceAttributes = new 
   Dictionary<string, Dictionary<string, string>>();

void AddAttribute(string deviceIdentifier, string attribute, string value)

   if(!deviceAttributes.Keys.Contains(deviceIdentifier))
      deviceAttributes.Add(deviceIdentifier, new Dictionary(attribute, value);
   else
      deviceAttributes[deviceIdentifier].Add(attribute, value);

如果每个设备都有某种标准方法来检索感兴趣的属性,您可以编写代码来接受任何数组,然后使用 for 或 foreach 循环将其添加到数据结构中。如果没有更具体地了解您要做什么,我真的不能说更多。

【讨论】:

该系统是一个设备网络,可以使用多种古老的协议。那部分完全令人讨厌,这些协议的实现(二进制,大部分未记录,因设备而异等)每个都需要数年时间。我真正在寻找的是一种改进我们目前拥有的抽象/API 的方法,它应该隐藏协议特定的细节并以易于使用且不需要大量重复的方式表示设备/到处都是样板代码。

以上是关于用于建模具有任意属性的联网设备的最佳 API 以供学习?的主要内容,如果未能解决你的问题,请参考以下文章

从实时视频设备捕获图像以供基于 Java 的应用程序使用的最佳方法是啥?

管理和加载属性的最佳实践

存储具有复杂数据结构的 JSON 文件以供以后使用的最佳方法是啥?

建模客户 <--> 地址的最佳方法

业务领域建模Domain Modeling

如何在函数式编程中建模继承关系