首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计一个依赖关系需要“启动”/initializing步骤的类

设计一个依赖关系需要“启动”/initializing步骤的类
EN

Software Engineering用户
提问于 2019-03-06 00:17:34
回答 2查看 279关注 0票数 -1

我有Facade类,它需要一个Endpoint实例才能起作用(它在大多数函数中都使用它)。端点附加到在Endpoint的构造函数中传递并必须启动的平台(Platform.Start())。平台和端点都来自外部库,并使用开始/停止模式。在Facade运行之前,必须初始化和启动平台和端点。构造Facade类需要用户提供构建平台/EndpointSettings所需的少量运行时参数。

在Facade类中,构建和启动平台和端点的最佳位置是什么?启动平台/终结点是一种操作,可能需要几秒钟的时间,并且可能由于各种原因而失败。

鉴于这种情况,这些设计中哪一种最合适:

  1. 在Facade的构造函数中初始化并启动Platform/Endpoint。
  2. 在Facade的Start方法中启动平台/端点。
  3. 使用构建器模式构建外观,并在构建方法中初始化/启动平台/终结点。
  4. 使用工厂模式来构造外观,并在Create方法中初始化/启动平台/端点。

构建/启动平台/终结点相对比较复杂,需要从证书存储区获取证书。如果使用Builder/Factory;这对他们来说“工作量太大”吗?

代码语言:javascript
复制
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...
    }
}
EN

回答 2

Software Engineering用户

发布于 2019-03-06 09:45:03

用工厂。

构建/启动平台/终结点相对比较复杂,需要从证书存储区获取证书。

我建议平台类应该负责启动自己,并且证书存储可以通过注入的服务获得,以避免这种复杂性出现在工厂中。

如果使用Builder/Factory;这对他们来说“工作量太大”吗?

工厂的工作就是组装终结点所需的所有依赖项,并将它们传递给它。但是,如果启动平台或终结点需要逻辑(包括,特别是顺序耦合),我建议将某种代码属于平台和端点类本身。

票数 0
EN

Software Engineering用户

发布于 2019-03-06 23:01:50

这取决于..。

  1. 在Facade的构造函数中初始化并启动Platform/Endpoint。

是。这将是理想的解决方案。最后,您将有一个有效的外观或异常。

  1. 在Facade的Start方法中启动平台/端点。

这不是一条很好的路。它允许外观处于未初始化状态。这削弱了facade提供的保证,因此需要用户在每次使用之前验证初始化状态。

我认为这是一个可空的单例、工厂和域对象的联合。它有一件事,可能是空的,可能需要被要求从空更改为真,这可能是可用的,也可能不是实际使用的。

  1. 使用构建器模式构建外观,并在构建方法中初始化/启动平台/终结点。

如果facade有一个复杂的配置,或者需要在应用程序中的几个地方应用配置,那么构建器就是一种完全合法的方法。

  1. 使用工厂模式来构造外观,并在Create方法中初始化/启动平台/端点。

如果正面可能有几个后端,那么工厂是明智的。或者,如果配置相对简单,这也会起作用。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/388122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档