ReferenceType值和ValueType值的Snappy名称

时间:2013-07-26 03:38:30

标签: c# naming

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

  • ReferenceTypeValueHandler和ValueTypeValueHandler?

Neah,ValueTypeValue让人感到困惑。

  • ClassValueHandler和StructValueHandler?

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

  • NullableValueHandler和NonNullableValueHandler?

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

  • HeapValueHandler和StackValueHandler?
那是愚蠢的。利用引用类型值存储在堆中的事实和值类型值在堆栈中,谁在乎?此外,“Stack”令人困惑,暗示它与堆栈有关。

还有什么想法?

更新

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

1 个答案:

答案 0 :(得分:2)

我不同意其他课程名称并不重要。您希望使代码能够说明问题,并使读者能够轻松理解设计类/结构时的概念。你建议的类名不会让我知道这个类实际上在做什么。我建议搜索更具体的名称:如何处理价值?有什么价值?

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

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

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

因此,在这种情况下,像CacheForValueTypeObjectsCacheForReferenceTypeObjects这样的东西可以工作。我不知道缓存是否表达了这个目的,但如果没有,我会尝试搜索一个最能描述该类“最终”目的的术语,以及它的原因。

我打赌你没想到'好吧,我现在真正需要的是ValueTypeValueHandler!'。还有更多的东西。 ;)我喜欢这样的问题,谢谢!