2013-07-26 35 views
1

我有2個類。一個處理一個ReferenceType值,另一個處理ValueType值。這是唯一的區別,但它很重要。我正努力爲每個班級找到一個像樣的名字:引用類型值和ValueType值的動態名稱

  • ReferenceTypeValueHandler和ValueTypeValueHandler?

Neah,ValueTypeValue聽起來很混亂。

  • ClassValueHandler和StructValueHandler?

我不應該在類的名字中使用「類」,我應該嗎?

  • NullableValueHandler和NonNullableValueHandler?

「可爲空的」 已用於空值類型(可空<>)

  • HeapValueHandler和StackValueHandler?

這是愚蠢的。利用引用類型值存儲在堆中的事實和值類型值在堆棧中,誰在乎?另外「堆棧」令人困惑,這意味着它與堆棧有關。

還有什麼想法?

更新:

有人建議我應該解釋類的目的。那麼,雖然我不認爲這很重要,但這裏是:我正在開發一個XML到實體解串器。我使用XmlReader來利用流線閱讀,而不是使用DOM。當我讀XML時,我建立了實體。有些實體只是其他一些實體的包裝器。這些包裝可以採用單個實體或實體的集合(可枚舉)。說到那些採用單一實體的實體,必須提供此實體,並且必須提供一次實體。如果XML沒有它,這是一個問題。如果XML超過1,這也是一個問題。因此,爲了保持和確保實體提供了一次,我有一個類ValueKeeper<TValue>。它有兩種方法TakeValue(TValue value)TValue ClaimValue()。 TakeValue方法獲取該值並檢查是否已經提供了之前提供的值,如果是這樣,則會引發具有適當細節的異常。 ClaimValue方法在包裝器XML的讀取完成並且包裝器實體必須被創建在刮取值上時被調用,該方法檢查是否存在通過TakeValue方法接收的值,如果是,則返回該值值,如果不是,那麼它會拋出異常。現在,問題在於,爲了查看是否提供了值,我使用與NULL比較的引用類型值。爲了使這種比較成爲可能,TValue類型參數必須有一個通用約束:where TValue: class。有這個約束,我不能使用這個類的值類型值。所以我需要另一個班級,但是使用的字段值來保持提供或不提供價值。現在,有兩個類我不能跟着ValueKeeper一起工作,我需要一個名稱作爲引用類型,另一個名稱是值類型值。這是問題出現的地方。我需要一種方式來表達這種微妙的差異。但是,班級做什麼並不重要,重要的是找到適當的方式來明確這種差異。

+1

這可能會有助於進一步描述課程的目的。 –

+0

一個類的目的是從字面上保持這個值,並確保它被提供。這其實並不重要,一個班級的其餘名稱可以是任何東西,重要的是反映出班級運作的是什麼樣的價值觀。 –

+0

再次,@bonomo,你有沒有考慮使用Equals(valueObject,default(TValue))而不是valueObject == null?沒有必要在參考和值類型之間做出區別... – Marc

回答

2

我不同意類名的其餘部分不重要。您希望讓自己的代碼爲自己說話,並讓讀者在設計類/結構時能夠輕鬆理解您的想法。你建議的班​​級名稱會讓我不知道班級實際上在做什麼。我建議尋找更具體的名稱:價值如何處理?什麼價值?

除了那個是類而另一個是struct之外,struct和class的值又有什麼區別呢?必須有一些更多的區別,因爲否則將結構和類(DRY)作爲同一事物是沒有意義的。

如果這是您執行的非常抽象的操作,請嘗試搜索模式或概念的通用名稱。爲了保持這個值,並確保它的提供聽起來有點像緩存機制?其次,您在這裏面臨語義問題:什麼是包含值類型的「值」和引用類型的「值」的術語。我們可以在這裏簡單地詢問.NET框架的繼承鏈,並將它稱爲對象

因此,在這種情況下,類似CacheForValueTypeObjectsCacheForReferenceTypeObjects可以工作。我不知道緩存是否很好地表達了目的,但是如果不是,我會嘗試尋找一個最能描述該類的「最終」目的的術語,也就是其中的原因。

我敢打賭,你沒有想'我現在真正需要的是一個ValueTypeValueHandler!'。還有更多的東西。 ;)我喜歡這類問題,謝謝!

+0

+1好的答案... – MoonKnight

+0

I只是更新了問題。 CacheForValueTypeObjects聽起來不錯,我可能會考慮它,謝謝。 –