我有Facade类,它需要一个Endpoint实例才能起作用(它在大多数函数中都使用它)。端点附加到在Endpoint的构造函数中传递并必须启动的平台(Platform.Start())。平台和端点都来自外部库,并使用开始/停止模式。在Facade运行之前,必须初始化和启动平台和端点。构造Facade类需要用户提供构建平台/EndpointSettings所需的少量运行时参数。
在Facade类中,构建和启动平台和端点的最佳位置是什么?启动平台/终结点是一种操作,可能需要几秒钟的时间,并且可能由于各种原因而失败。
鉴于这种情况,这些设计中哪一种最合适:
构建/启动平台/终结点相对比较复杂,需要从证书存储区获取证书。如果使用Builder/Factory;这对他们来说“工作量太大”吗?
public class Platform
{
public Platform(PlatformSettings platformSettings)
{
}
public void Start()
{
}
public void Stop()
{
}
}
public class Endpoint
{
public Endpoint(Platform platform, EndpointSettings endpointSettings)
{
}
public void Start()
{
}
public void Stop()
{
}
}
public class Facade
{
private readonly Endpoint _endpoint;
public Facade(string somePlatformSetting,
string someEndpointSetting,
FacadeSettings facadeSettings)
{
//(Method 1) Initialize and start platform and endpoint here?
}
public void Start()
{
//(Method 2) Initialize and start platform and endpoint here?
}
public void Stop()
{
}
public void DoOperationOnEndpoint()
{
//_endpoint.DoSomething...
}
}发布于 2019-03-06 09:45:03
用工厂。
构建/启动平台/终结点相对比较复杂,需要从证书存储区获取证书。
我建议平台类应该负责启动自己,并且证书存储可以通过注入的服务获得,以避免这种复杂性出现在工厂中。
如果使用Builder/Factory;这对他们来说“工作量太大”吗?
工厂的工作就是组装终结点所需的所有依赖项,并将它们传递给它。但是,如果启动平台或终结点需要逻辑(包括,特别是顺序耦合),我建议将某种代码属于平台和端点类本身。
发布于 2019-03-06 23:01:50
这取决于..。
是。这将是理想的解决方案。最后,您将有一个有效的外观或异常。
这不是一条很好的路。它允许外观处于未初始化状态。这削弱了facade提供的保证,因此需要用户在每次使用之前验证初始化状态。
我认为这是一个可空的单例、工厂和域对象的联合。它有一件事,可能是空的,可能需要被要求从空更改为真,这可能是可用的,也可能不是实际使用的。
如果facade有一个复杂的配置,或者需要在应用程序中的几个地方应用配置,那么构建器就是一种完全合法的方法。
如果正面可能有几个后端,那么工厂是明智的。或者,如果配置相对简单,这也会起作用。
https://softwareengineering.stackexchange.com/questions/388122
复制相似问题