Si se va a tratar con incluso más de un tipo de dispositivo, a continuación, la separación del regulador + dispositivo de interfaz, que se comunica utilizando pares Nombre vlaue sería una buena solución
DESACOPLE
Utilización del valor de nombre pares le permite separar sus código en un dispositivo controlador + estructura + código de la aplicación
código de ejemplo
class DeviceInterface
{
void Initialize(IController & Controller);
void Close();
bool ChangeParameter(const string & Name, const string & Value);
bool GetParam(string & Name, string &Value);
}
Cada implementación dispositivo, cuando se crea debe ser creado con la identificación del controlador que puede aceptar sus órdenes y traducirlos en el dispositivo real comandos
interface IController
{
Initialize(DeviceSpecific & Params);
Close();
bool ChangeParameter(string & Name, string & Value);
bool ChangeParams(string & Name[], string &Value []);
}
Su código de usuario se vería algo como esto
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();
}
Todo lo que debe hacer la clase DeviceInterface es hacer pasar los comandos al controlador. El controlador debe encargarse de la comunicación del dispositivo.
ventajas de la separación de interfaz
Proteger cambia Againt
Este tipo de desacoplamiento le permitirá aislar el código de aplicación desde el controlador.Los cambios en el dispositivo no afecta a su código de usuario
mantenimiento del código Appliction
Addtionally el código de usuario está siempre limpio y hay que molesta sólo con la lógica de la aplicación. Pero si hubiera definido múltiples interfaces/plantillas creadas o genéricos con múltiples tipos de estructuras de parámetros específicas para el controlador, su código tendría mucha basura dependiente del dispositivo que podría dañar la legibilidad y crear problemas de mantenimiento cada vez que cambie su dispositivo/sus parámetros.
facilidad de implementación
También puede desprenderá de diferentes implementaciones de controladores en sus propios proyectos. Además, su aplicación también puede configurar comandos y respuestas de una manera más dinámica utilizando archivos XML, etc. que pueden enviarse junto con las clases de controlador de modo que toda su aplicación se vuelva más dinámica por naturaleza.
Vida Real
Uno de los últimos proyectos de contralor de la producción de la empresa líder en ese dominio funciona de la misma manera. Pero usan LON para la comunicación del dispositivo.
LON?
protocolo LON se utiliza en los controladores (piensa acondicionador de aire/caldera/ventiladores, etc) de las redes utilizan este concepto para hablar con varios dispositivos
Así que todo lo que usted necesita tener es una interfaz única que puede hablar con su dispositivo y luego le envía el par de nombre y valor usando LON. El uso de un protocolo estándar también le permitirá hablar con otros dispositivos además de su instrumento de medición. Existen implementaciones de código abierto de LON disponibles si su dispositivo usa LON.
Si su dispositivo no es compatible con LON, tendrá que diseñar algo donde el código de usuario aún funcione en pares de valores nominales y una interfaz opuesta traduzca sus pares de valores nominales en una estructura cotroller correspondiente equivalente y se comunique al dispositivo individual en la forma en que el dispositivo entiende.
Espero que esto sea útil.
¿Está planeando probar las diferentes clases de instrumentos concretos o está utilizando simuladores y varificación de hardware? – Kasper
Voy a utilizar pruebas unitarias – Enrico