2009-11-23 3 views
3

Мне нужно разработать новый API, который моделирует сетевые устройства, которые имеют большое количество атрибутов, которые сильно различаются в зависимости от типа устройства. Набор атрибутов не является полностью произвольным, хотя это большой набор известных атрибутов. Тем не менее, с новыми устройствами появляются новые атрибуты, поэтому ситуация никогда не фиксируется полностью.Лучший API для моделирования сетевых устройств с произвольными атрибутами для изучения?

Сетевые устройства сами приходят и уходят, поэтому это центральная часть дизайна API. Кроме того, было бы предпочтительнее получать обновления атрибутов/наборов атрибутов через некоторый вариант шаблона Observer.

Примечание: Я не говорю о сетевом управлении, хотя это может звучать так. Тем не менее, API-интерфейсы этих систем могут быть очень удобными и заслуживают внимания.

Итак, мой вопрос: знаете ли вы какие-либо хорошие API-интерфейсы в мире Open Source, из которого я мог бы научиться и получить вдохновение?

Система будет на основе Java, поэтому примеры предпочтительно будут иметь близкие относительные языки, например. Java (конечно :)), C#, Scala и другие подобные статически типизированные языки.

+0

Какие атрибуты вам интересны? Примеры? Как вы собираетесь использовать модели? – Ichorus

+0

Похоже, что это отличный проект, демонстрирующий гибкость черт Scala. Определите некоторые основные объекты и микшируйте соответствующие определенные черты, пока у вас не будет модели, необходимой для определенного устройства ... – Ichorus

+0

Может быть.К сожалению, это будет жить в центре большой старой системы, написанной на Java (для этого это был бы большой редизайн). То, что мне нужно, в основном заменяет модель основного домена. Представление нового языка будет напоминать рецепт катастрофы. – auramo

ответ

0

Непонятно, что я полностью понимаю ваш вопрос, но я дам ему шанс.

Вы хотите, чтобы устройство могло публиковать свои атрибуты, когда оно находится в сети? Если это так, на самом деле это не очень хороший способ, если вы не будете писать код, который теперь понимает, чтобы взаимодействовать с устройством. После того, как у вас есть что-то подобное, все, что вам нужно - это класс, который хранит данные атрибутов в некоторой структуре данных по вашему вкусу. Для обновления, вам, вероятно, необходимо опрашивать устройства периодически, если они не имеют способ отчетности, когда их атрибуты меняются:

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. Я не могу сказать больше, не имея более конкретных знаний о том, что вы пытаетесь сделать.

+0

Система представляет собой сеть устройств, которые говорят о нескольких древних протоколах. Эта часть полностью противна, реализация этих протоколов (двоичная, в основном недокументированная, отличается от устройства к устройству и т. Д.) Занимает годы каждый. На самом деле я ищу способ улучшить абстракцию/API, которые у нас есть, которые должны скрывать эту конкретную деталь протокола и представлять устройства таким образом, который прост в использовании и не требует огромного количества дубликатов/шаблонный код повсюду. – auramo

1

Я не уверен, что именно ваш API должен делать, но я предполагаю, что, поскольку сетевые устройства «приходят и уходят все время» и что вы хотели использовать шаблон наблюдателя, вы ищете для чего-то, что может получать обновления о текущем состоянии вещей в сети.

Вы посмотрели SLP? Это протокол pub/sub, который может делать то, что вы хотите: он позволяет сетевым устройствам транслировать свое присутствие и свойства по сети, а также слушать других людей. Он работает через TCP и UDP (одноадресная и многоадресная рассылка).

Существует несколько реализаций java (например, jslp), но я никогда не был полностью ими доволен (так что я закончил писать свои собственные). Что касается C#, я не мог найти его легко.

+0

Спасибо, я проверю API (хотя вы уже упоминали, что это не удовлетворяет :-)). Да, я не упоминал в этом вопросе, что протоколы уже есть, и есть также API. Протоколы не могут быть (когда-либо) изменены, но у нас есть API, который представляет устройства, так что это мое внимание, и именно это я хочу значительно улучшить. – auramo

+1

SLP больше подходит для устройств, чтобы представлять себя, чем действительно общаться друг с другом. Вот RFC, если вы заинтересованы в написании своего собственного подмножества: http://www.rfc-editor.org/rfc/rfc2608.txt – Seth

0

Я могу посмотреть LDAP/ActiveDirectory/ADAM (Active Directory Active Directory). , , TheEruditeTroglodyte

 Смежные вопросы

  • Нет связанных вопросов^_^