Если вы собираетесь иметь дело с еще более чем одного типа устройства, то контроллер + интерфейс устройства Разделения, который обменивается данными с помощью пары Имя vlaue будет хорошим решением
Развязка
иСПользоВание значение имени пар позволяет отделить код в устройство + контроллер + кода приложения структуры
Пример кода
class DeviceInterface
{
void Initialize(IController & Controller);
void Close();
bool ChangeParameter(const string & Name, const string & Value);
bool GetParam(string & Name, string &Value);
}
Каждая реализация устройства, при его создании должно быть создано с идентификацией контроллера, который может принимать свои команды и перевести их в реальное устройство команды
interface IController
{
Initialize(DeviceSpecific & Params);
Close();
bool ChangeParameter(string & Name, string & Value);
bool ChangeParams(string & Name[], string &Value []);
}
Ваш код пользователь будет выглядеть как этот
IController objController = new MeasurementDevice(MeasureParram);
DeviceInterface MeasureDevice = new DeviceInterface(objController);
string Value;
MeasureDevice.GetParam("Temperature", Value);
if (ConvertStringToInt(Value) > 80)
{
MeasureDevice.ChangeParameter("Shutdown", "True");
RaiseAlert();
}
Все, что должен сделать класс DeviceInterface, это позаботиться о передаче команд контроллеру. Контроллер должен следить за коммуникацией устройства.
Преимущества интерфейса Разделение
Защита Побейте изменения
Этого вида развязки позволит изолировать код приложения от контроллера.Изменения в устройстве не влияют на ваш код пользователя
ремонтопригодности Appliction Код
Addtionally код пользователя всегда чист, и вы должны беспокоить только с логикой приложения. Но если бы вы определили несколько интерфейсов/созданных шаблонов или дженериков с несколькими типами структур параметров, характерных для контроллера, ваш код имел бы много зависящего от устройства мусора в нем, что могло бы повредить читаемость и создавать проблемы обслуживания при изменении вашего устройства/его параметров.
простота реализации
Вы также можете отделиться различные реализации контроллера в свои собственные проекты. Кроме того, ваше приложение может также настраивать команды и ответы более динамично, используя файлы XML и т. Д., Которые могут поставляться вместе с классами контроллеров, чтобы все ваше приложение стало более динамичным по своей природе.
Real Life
Один из последних проектов контроллеров производства от лидера в этой области работает таким же образом. Но они используют LON для связи с устройством.
LON?
протокол LON используется в контроллерах (думаю кондиционер/котел/вентиляторы и т.д.) сети используют эту концепцию, чтобы поговорить с различными устройствами
Таким образом, все, что вам нужно будет иметь это единый интерфейс, который может говорить с ваше устройство, а затем отправляет ему пару значений имени, используя LON. использование стандартного протокола также позволит вам разговаривать с другими устройствами, кроме вашего измерительного прибора. Существуют версии с открытым исходным кодом LON, если ваше устройство использует LON.
Если ваше устройство не поддерживает LON, вам может потребоваться создать что-то, где код пользователя по-прежнему работает с парами значений имени, а противоположный интерфейс преобразует ваши пары значений имени в эквивалент, соответствующий cotroller struct +, и связывается с устройством индикации в как понимает устройство.
Надеюсь, это пригодится.
Планируете ли вы тестировать отдельные классы конкретных приборов или используете симуляторы и аппаратную разметку? – Kasper 2008-10-26 17:58:28
Я буду использовать модульные тесты – Enrico 2008-10-26 18:58:53