【问题标题】:Understanding the gateway pattern with a static constructor使用静态构造函数理解网关模式
【发布时间】:2012-11-27 13:28:35
【问题描述】:

我正在关注此链接: http://codebetter.com/jpboodhoo/2007/10/15/the-static-gateway-pattern/ 了解网关模式。

作者分享了一个“网关”记录器类和相关接口的示例:

public class Log
{
    private static ILogFactory logFactory;

    public static void InitializeLogFactory(ILogFactory logFactory)
    {
        Log.logFactory = logFactory;
    }

    public void InformationalMessage(string informationalMessage)
    {
        logFactory.Create().InformationalMessage(informationalMessage);
    }
}

public interface ILogFactory
{
    ILog Create();
}

public interface ILog
{
    void InformationalMessage(string message);
}

这是调用 API

public class Calculator
{                
public int Add(int number1,int number2)
{
Log.InformationalMessage("About to add two numbers");            
return number1 + number2;
}
}

我无法理解具体日志记录类的初始化在哪里发生。网关的入口点是什么?

【问题讨论】:

  • 在文章的底部,作者说:“在这里完成的是一个 ILogFactory/ILog 对的快速实现,它将向控制台输出日志消息(我会留给你提出以下 2 个类的更可测试的实现):"
  • @Ric,感谢您指出这一点。最后,我明白了。在弄清楚那篇文章之前,我有点拒绝继续写这篇文章。

标签: c# design-patterns gateway


【解决方案1】:

关于接口的具体实现,文章底部有示例说明如何实现。

【讨论】:

    【解决方案2】:

    示例的布局方式有点欺骗性,因为 API 的调用与第一个示例更相关。请注意调用 init 的测试用例。此外,您将拥有作者没有的 Log 实例,在示例中更具象征意义。另一种选择是静态 Log 类。

    【讨论】:

    • 没错!显然InformationalMessage 方法需要一个 Log 类的实例。我想知道作者如何没有得到构建错误。如果您能帮助我使用正确的调用 API,那将是完美的。试图弄清楚这一点而失去理智:|
    • 文章底部有类的实现!
    【解决方案3】:

    编辑:请忽略这个,这是不正确的。我不删除的唯一原因是我对指出它的人的评论可以继续。

    请注意,'Log` 类具有静态构造函数:

    public static void InitializeLogFactory(ILogFactory logFactory)
        {
            Log.logFactory = logFactory;
        }
    

    第一次加载 Log 类时(在第一次引用时),静态构造函数将运行,使用工厂的具体实现初始化其 logFactory

    然后,每次调用InformationalMessage 时,都会使用具体工厂来创建记录器的实例来记录消息。

    【讨论】:

    • 那不是构造函数,那是公开的静态方法。构造函数名称和类名称应该匹配,至少在 C# 中。
    • 抱歉,完全正确……现在对我来说太早了。我不得不承认,当我阅读他的文章时,我认为它过于复杂而没有真正的收获。如果你沉迷于命名模式,这里的相关模式应该是服务代理模式。
    • 服务代理模式。有趣的。将不得不检查出来。在这种情况下,InitializeLogFactory 不会被运行,除非它被显式调用对吧?
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多