2008-11-17 79 views
1

我有一個域對象的集合,我需要將它轉換爲.NET框架使用的另一種類型。做這種轉變的最佳做法是什麼?最佳的OO練習適應一種類型到另一種?

具體來說,我有一個名爲ContentEntry的類型,我需要將它轉換爲SyndicationItem以用於SyndicationFeed。轉換本身很簡單,但我正在尋找一個好的模式。我是否在ContentEntry上創建了一個名爲CreateSyndicationItem()的方法,或者是一個單獨的轉換器對象?也許是擴展方法?

這會有點主觀,但我會欣賞一些想法。

編輯注:我想指出,我不控制SyndicationItem。它構建在.NET Framework中。另外,我真的很想同時將幾個ContentEntry對象轉換爲SyndicationItems。

回答

3

如爲無法修改SyndicationItem的建設者,我建議你使用factory pattern。創建一個具有方法CreateSyndicationItem()的SyndicationItemFactory類。此方法返回一個SyndicationItem對象。在這種情況下,您只需要一個版本的方法,它將採用ContentEntry對象。

當你說你想一次創建多個ContentEntry對象時,我假設你有一個ContentEntry對象的數組。另一種方法(比如CreateSyndicationItems())可能會返回一個SyndicationItems數組,並將一組ContentEntry對象作爲其參數。

+0

在我這裏的情況,我發現這是最好的方法。鑄造似乎並不合適,並且由於不需要維護狀態,創建一個新的轉換器類,每次需要進行轉換時都會實例化,看起來過於誇張。我的工廠目前只有靜態成員。 – 2008-11-18 02:29:04

1

恕我直言,一個轉換器類,轉換一種方式,可能是另一種是你應該做的。一個類應該有一個目的,例如表示ContentEntry。添加轉換給了它第二個目的,因此打破了OO'規則'。

4

我建議尋找Adapter Pattern

在計算機編程,適配器 設計圖案(通常被稱爲 包裝圖案或簡稱爲 包裝器)轉換爲 一類一個接口成兼容的界面。

0

這取決於...你只是想要一個方便的方式來託管轉換方法嗎?如果你控制一個或兩個類,你可以簡單地添加一個轉換運算符重載,這樣你就可以將一個類轉換爲另一個類。如果你希望它是顯而易見的,可以做出明確操作

SyndicationItem item = (SyndicationItem)entry

0

如果能夠通過這兩種類型的公共合同做轉換,我強烈推薦的擴展方法。

參見,System.Linq.Enumerable.ToList(),Enumerable.ToDictionary()

推理:

  • 你不想任一對象有與其他物體聯結。
  • 轉換過程本身沒有狀態管理,一旦它已經完成(適用於靜態方法)
相關問題