我正在做一个包括自定义 OPC 客户端的项目。Main 类表示 WPF 应用程序中的 MainWindow。私有字段_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 客户端对象,并以一个或另一个方向传递服务器对象。将会有更多这样的方法(如读取标签等),但由于用户应该每天只使用一次或两次,我认为创建新对象并在它们之间传递一些东西没有问题。
但是,如果有一个真正有趣的用户认为他必须一直使用这些东西(连接/断开/等)怎么办。然后我将最终创建许多对象!
我想了想,想出了这个。
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 客户端的单例并将其传递给主类。现在只会创建一个对象,用户可以整天单击连接/断开连接。
在这里进行的最佳方式是什么?
- 将服务器对象存储在主类中
- 将类对象存储在主类中
- 要看
- 两者都是坏主意(如果是这样,为什么?我能做些什么呢?)