【问题标题】:Is there a standard name for an empty interface implementation used for a 'null behavior'?用于“空行为”的空接口实现是否有标准名称?
【发布时间】:2019-03-01 16:19:54
【问题描述】:

考虑(以 C# 为例)一个接口:

interface ILog
{
   void log(string text);
}

其中有以下实现:

class GUILog : ILog
{
   public log(string text)
   {
      MessageBox.Show(text);
   }
}

class ConsoleLog : ILog
{
   public log(string text)
   {
      Console.WriteLine(text);
   }
}

class FakeLog : ILog
{
   public log(string text)
   {
      //Do nothing
   }
}

“FakeLog”之类的内容是否有通用命名约定。请注意,日志记录上下文只是一个示例。一般的想法是你有一个什么都不做的实现......你应该如何命名它?当然,您必须假设客户端不依赖实现来正确操作。 'Mock' 可能很接近,但更多来自测试方面,在这种情况下,不会记录任何调用。也许是“NOOP”?

【问题讨论】:

标签: design-patterns naming-conventions naming


【解决方案1】:

没有标准名称。但是我们可以使用clean code 原则找到一个:

  • 为每个概念选择一个词。保持一致。
  • 好名字应该描述业务和解决方案领域。
  • 如果有设计模式,就使用它。

其实我们有一个名字,就是NullObject。看看Null Object Design Pattern

Null Object 的目的是封装对象的缺失 通过提供可替代的替代方案,提供合适的默认值 什么都不做的行为。简而言之,一种“什么都不会发生”的设计 什么都没有”

在以下情况下使用空对象模式

  • 一个对象需要一个合作者。空对象模式不 介绍这种合作——它利用了一种合作 已经存在
  • 一些协作者实例应该什么都不做
  • 您希望将 null 的处理从客户端抽象出来

下面:

class NullLog : ILog {
...
}

表示你想登录到null,这意味着你想把它扔掉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多