适当设计多个代理服务器

时间:2013-08-13 18:44:48

标签: c# .net oop

(使用C#处理.net环境)

我们正在编写一个管理多个数据提供代理的专有服务器,这里有一些伪代码,因此简化了解释:

class Server
{
  ServerManagementGUI server_gui; // a GUI to display all sort of Server related data

  MonitorAgent m_agnt;
  DataAgent    d_agnt;
  // will not be allocated or init at C'tor

  public write_data1();
  public write_data2();

  public get_data5();

  // etc
}

class Agent
{
// handles generic communication and threading issues

// a reference to Server is required to write 
// the data to it's private data structures. 
// please note that a delegate to one or more function will not suffice here.

Agent(Server server); 

}

class MonitorAgent : Agent
{
 // handles task spesific issues

}

class DataAgent : Agent
{
 // handles task spesific issues
}

这个想法是代理异步收集数据,处理任何通信和线程问题,并使用Server的方法来填充它的数据结构。 我们不确定上述是否是“良好做法”设计。

如果您对我们的设计有任何其他想法或见解,请告知我们。

更新: Server还有一个GUI对象,它可以为其提供一些信息。 因为代理是那些实际生成数据(从Web上获取数据或从硬件传感器获取数据)的代理,它必须能够直接访问ServerManagementGUI的方法。现在,由于每个代理使用ServerServerManagementGUI的不同方法和属性,我们认为将引用传递给整个对象最方便。

1 个答案:

答案 0 :(得分:0)

我不会将Server引用直接传递给代理。 Agent需要的不是实际的服务器引用,而是服务器的抽象,比如IServerContext。让服务器对象为您实现此接口,然后在创建代理期间,您可以向代理注入IServerContext的引用。 这有助于您在服务器和代理之间建立一对低通信合同。因此,您的代理不依赖于服务器实现。 此外,它使您能够简单地对IServerContext进行单元测试,并确保它提供不同代理可能需要的所需数据和行为。 其他好处是您也可以使用任何IoC库将不同代理的多个不同实现注入到不同的代理中。