Проблема моделирования - сетевые устройства с командами - PullRequest
1 голос
/ 11 марта 2010

Сегодня я столкнулся с проблемой моделирования царапин на голове:

Мы моделируем физическую систему управления, состоящую из устройств и NetworkDevices . Любой пример устройства - телевизор. Примером NetworkDevice является ИК-приемопередатчик с подключением Ethernet.

Как видите, чтобы иметь возможность управлять телевизором через Интернет, мы должны подключить Device к NetworkDevice . Между Device и NetworkDevice существует отношение один ко многим, т. Е. Телевизор имеет только один NetworkDevice (ИК-приемопередатчик), но ИК-приемопередатчик может управлять многими Устройства (например, много телевизоров).

Пока проблем нет.

Сложный бит состоит в том, что каждое устройство имеет набор команд . Тип Command (например, IrCommand , SerialCommand - NB в настоящее время не моделируется) зависит от типа NetworkDevice , к которому подключено Устройство .

В текущей унаследованной системе Устройство имеет набор общих Команд (без ввода), где поля "интерпретируются" в зависимости от типа NetworkDevice .

Как мне моделировать это в ООП так, чтобы:

  • Вы можете когда-либо добавить Command соответствующего типа, если NetworkDevice Устройство подключено к?
  • Если я изменю NetworkDevice, коллекция команд изменится на соответствующий тип
  • Сделайте так, чтобы API был простым / элегантным / интуитивно понятным

1 Ответ

0 голосов
/ 11 марта 2010

Вы можете использовать Abstract Factory Pattern . Идея состоит в том, чтобы дать Device фабрику для создания Commands. Тип фабрики будет зависеть от типа NetworkDevice. Таким образом, если Device подключен к IR-Controller, он получит IRCommandFactory.

...