2012-09-21 3 views
0

Я делаю проект, включая пользовательский 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 весь день.

Каков наилучший способ для продолжения здесь?

  1. магазин Объект сервера в главном классе
  2. магазин Класс объекта в главном классе
  3. Зависит
  4. Оба плохие идеи (если да, то почему? Что я могу сделать, а?)

ответ

0

Я выбираю второй вариант. Выбрав одноэлементный подход, я могу убедиться, что существует только один объект сервера. Это очень важно.

Смежные вопросы