Я делаю проект, включая пользовательский OPC-клиент. Класс Main представляет MainWindow в приложении WPF. В частном поле _opcServer
будет размещен объект для дальнейшего использования. Только один объект _opcServer
разрешен в любое время. я пришел с этим (это все примеры кода и работает отлично)глобальный «объект класса» или глобальный «серверный объект»
// "Main" Class --> it's a WPF Window
public class Main
{
// the "global" server object
private OpcServer _opcServer = new OpcServer();
public Main() {}
private void connectOpcServer()
{
if(this._opcServer == null)
{
// the "global" server object
this._opcServer = this.opcClientFactory().connectOpcServer("someOpcServer");
if(this._opcServer != null)
{
// we made the connection
}
else
{
// connection failed
}
}
}
private void disconnectOpcServer()
{
if(this._opcServer != null)
{
if(this.opcClientFactory().disconnectOpcServer(this._opcServer))
{
// disconnected
this._opcServer = null;
}
else
{
// something went wrong
}
}
}
private OpcClient ocpClientFactory()
{
OpcClient opcClient = new opcClient();
return opcClient;
}
}
// Client Class
public class OpcClient
{
// the server object
private OpcServer _opcServer = new OpcServer();
public OpcClient() {}
public OpcServer connectOpcServer(string progID)
{
bool madeConnection = this._opcServer.Connect(progID);
if(madeConnection)
{
return this._opcServer;
}
else
{
return null;
}
}
public bool disconnectOpcServer(OpcServer opcServer)
{
this._opcServer = opcServer;
if(this._opcServer.disconnect())
{
this._opcServer = null;
return true;
}
return false;
}
}
Не так много комментариев в коде, но я думаю, вы получите точку. Каждый раз, когда подключение или отключение запускается с помощью пользовательского действия, создается новый объект OPC-клиента и объект Server передается в том или ином направлении. Это будет больше способов (например, чтение тегов и т. Д.), Но поскольку пользователь должен использовать их только один или два раза в день, я не вижу проблем с созданием новых объектов и передачей чего-то между ними.
Но что, если есть настоящий забавный пользователь, который думает, что он все время должен использовать эти вещи (connect/disconnect/etc ...). Тогда я создам много объектов!
Я подумал и придумал это.
public class Main
{
// the client object
private OpcClient _opcClient = OpcClient.Instance;
public Main(){}
private void connectOpcServer()
{
if(this._opcClient.connectOpcServer("someOpcServer"))
{
// we made the connection and can now use
// this._opcClient.opcServer
}
else
{
// connection failed
}
}
private void disconnectOpcServer()
{
if(this._opcClient.disconnect())
{
// disconnected
}
else
{
// something went wrong
}
}
}
public class OpcClient
{
private static OpcClient _instance;
public static OpcClient Instance
{
get
{
if(instance == null)
{
_instance = new OpcClient();
}
return _instance;
}
}
private OpcClient()
{
this.opcServer = new OpcServer();
}
public OpcServer opcServer
{
get;
private set;
}
public bool connectOpcServer(string progID)
{
return this.opcServer.Connect(progID);
}
public bool disconnectOpcServer()
{
return this.opcServer.disconnect();
}
}
Теперь я создаю пейнтбол OPC-клиента и передаю его в основной класс. Теперь будет создан только один объект, пользователь может щелкнуть connect/disconnect весь день.
Каков наилучший способ для продолжения здесь?
- магазин Объект сервера в главном классе
- магазин Класс объекта в главном классе
- Зависит
- Оба плохие идеи (если да, то почему? Что я могу сделать, а?)