2009-12-04 58 views
3

我正在構建一個將數據公開爲XML的REST API。我在我的領域層中有一大堆領域類,這些領域類旨在供API後面的服務層和我們將提供給客戶的客戶端API使用。 (客戶可以選擇直接與REST API交互,但客戶端API簡化了這些事情)。我想讓我的域類清除任何數據持久性邏輯,但是我試圖弄清楚域類是否可以實現IXmlSerializable來幫助簡化序列化通過並從中檢索的數據的過程API。我開始認爲我會保持域類沒有任何序列化邏輯,而是用序列化行爲來修飾它們,例如,將域對象包裝在處理序列化的對象中。我是否讓事情比他們需要的更復雜?有關我應該如何處理這個問題的想法?謝謝!域對象是否應該實現IXmlSerializable?

回答

5

域類只應關注業務邏輯,而不是持久化或序列化。

您應該創建一組數據傳輸對象(DTO)類,每個類對應於一個域類。這些類只包含您決定公開的域類的屬性。這允許域類具有不通過持久性或序列化層公開的屬性。

只有DTO對象纔會被序列化和反序列化。

然後,您可能會發現創建靜態「translate」方法以在域和DTO對象之間進行轉換很方便。

+0

你的序列化圖層會是什麼樣子?你會有方法接受DTO並以XML格式輸出嗎?或者你會採取一個流並序列化到它? – csano 2009-12-04 04:29:09

+0

這取決於我需要什麼。我傾向於遵循.NET中許多基於XML的API的模式,並接受一個「XmlWriter」作爲目標。如果我發現調用代碼從流中重複創建'XmlWriter',我會添加一個需要流的重載。如果我使用'XPathNavigator.AppendChild'創建'XmlWriter'找到調用代碼,那麼我會寫一個接受'IXmlNavigable'的重載,等等。 – 2009-12-04 04:35:02

+0

謝謝,John,我很感激。 – csano 2009-12-04 04:49:19

相關問題