1

我有2节课。一个处理 ReferenceType 值,另一个处理 ValueType 值。这是唯一的区别,但很重要。我正在努力为每个班级找到一个像样的名字:

  • ReferenceTypeValueHandler 和 ValueTypeValueHandler?

是的,ValueTypeValue 听起来令人困惑。

  • 类值处理程序和结构值处理程序?

我不应该在班级名称中使用“班级”,不是吗?

  • NullableValueHandler 和 NonNullableValueHandler?

"Nullable" 已用于可空值类型 (Nullable<>)

  • HeapValueHandler 和 StackValueHandler?

那是愚蠢的。利用引用类型值存储在堆中而值类型值存储在堆栈中的事实,谁在乎呢?“堆栈”也令人困惑,暗示它与堆栈有关。

还有什么想法吗?

更新:

有些人建议我应该解释这门课的目的。好吧,虽然我认为这并不重要,但它是:我正在研究 XML 到实体反序列化器。我使用 XmlReader 来利用流线读取而不是使用 DOM。当我阅读 XML 时,我会构建实体。一些实体只是其他一些实体的包装器。这些包装器可以采用单个实体或实体的集合(可枚举)。说到那些采用单个实体的实体,必须提供该实体,并且必须恰好提供一次。如果 XML 没有它,那就是个问题。如果 XML 有超过 1 个,这也是一个问题。因此,为了保持并确保在我有一个类的时候准确地提供实体ValueKeeper<TValue>。它有2种方法TakeValue(TValue value)TValue ClaimValue(). TakeValue 方法获取该值并检查之前是否已经提供了一个值,如果是,它会抛出带有适当详细信息的异常。一旦包装器 XML 的读取完成并且包装器实体必须在抓取的值上创建,则调用 ClaimValue 方法,此方法检查是否有通过 TakeValue 方法接收到的值,如果是则返回该值,如果不是,则抛出异常。现在,问题是对于引用类型值,我使用与 NULL 的比较来查看是否提供了该值。为了使这种比较成为可能,必须对 TValue 类型参数有一个通用约束:where TValue: class. 有了这个约束,我不能将这个类用于值类型值。因此,我需要另一个执行相同操作的类,但where TValue: struct使用Nullable<TValue>字段对值进行操作以保持提供或尚未提供的值。现在,有 2 个类我不能只使用 ValueKeeper,我需要一个名称作为引用类型,另一个名称作为值类型值。这就是问题出现的地方。我需要一种方法来表达这种微妙的差异。但同样,类做什么并不重要,重要的是找到适当的方法来明确这种差异。

4

1 回答 1

2

我不同意其余的类名并不重要。你想让你的代码不言自明,让读者更容易理解你在设计类/结构时想到的概念。您建议的班级名称会让我不知道班级实际在做什么。我建议搜索更具体的名称:如何处理价值?什么价值?

除了一个是类而另一个是结构之外,结构和类的值有何不同?必须有更多区别,否则将具有与结构和类(DRY)相同的东西是没有意义的。

如果这是您执行的非常抽象的操作,请尝试搜索模式或概念的通用名称。保留值并确保提供它听起来有点像缓存机制?

其次,您在这里面临一个语义问题:包含值类型的“值”和引用类型的“值”的术语是什么。我们可以在这里简单地询问 .NET 框架的继承链,并将其称为对象

因此,在这种情况下,类似CacheForValueTypeObjectsandCacheForReferenceTypeObjects可以工作。我不知道缓存是否很好地表达了目的,但如果不是,我会尝试搜索一个最能描述类的“最终”目的的术语,以及它存在的原因。

我敢打赌,您不会认为“好吧,我现在真正需要的是一个 ValueTypeValueHandler!”。还有更多的东西。;) 我喜欢这类问题,谢谢!

于 2013-07-26T06:22:23.447 回答