我正在開發一個項目,我必須從一個源獲取數據並對其進行翻譯/調整,以便它可以被其他源(在本例中爲數據庫)正確使用。我想這是一個相當普遍的問題,儘管我相信自己的開局不錯,但我仍然堅持如何最好地實施解決方案的中間部分,負責解析原始數據並生成該數據可用於我的流程的下一部分。將數據從一種類型轉換爲另一種類型存在哪些模式?
假設我的公司服務器上有一個Web服務,負責接收第三方供應商提供的銷售訂單。在供應商調用Web服務之後,我應該有一個名爲MyVendor.CustomOrder
的強類型對象。然後我負責解析MyVendor.CustomOrder
實例,以便在我公司的系統中將數據格式化爲「訂單」。
我已經有存儲過程插入數據到數據庫中,我甚至創建了輔助方法來與存儲過程進行通信。我還有一些接口,如IOrderHeader
,IOrderPayment
等,作爲這些輔助方法要使用的數據的「契約」存在。
我試圖找出如果一個很好的模式存在,即在原始MyVendor.CustomOrder
對象分析數據,爲IOrderHeader
等接口提供的數據。以下是我可能想象的作品是怎麼走到一起(在輕微有用的ASCII圖):
________________________________
| |
| Web Service to receive order |
| |
| __________________________ |
|__| |__|
| MyVendor.CustomOrder |
|________________________|
||
||
\/
__________________________
| |
| ?????????????????????? |
| Parse |
| MyVendor.CustomOrder |
| and pass data to |
| next step |
| ?????????????????????? |
|________________________|
||
||
\/
_________________________
| |
________|________ |
| IOrderHeader | |
|_______________| Methods |
________|________ to |
| IOrderPayment | Add Data |
|_______________| to |
________|________ Database |
| IOrderDiscount| |
|_______________| |
________|________ |
| IOrderItem | |
|_______________| |
|_______________________|
||
||
\/
__________________________
| |
| Data Access Layer, |
| Database, etc.... |
|________________________|
我迄今唯一的想法是使處理一切,可能像這樣一個巨型類:
public class MyVendorCustomOrderParserAndDatabaseUpdater
{
private IOrderItem _IOrderItem;
//other private interface instantiations
public MyVendorCustomOrderParserAndDatabaseUpdater(
MyVendor.CustomerOrder customOrder)
{
ParseOrderIntoInterfaces(customOrder);
}
private void ParseOrderIntoInterfaces(
MyVendor.CustomOrder customOrder)
{
//Parse customOrder into _IOrderItem, etc.
}
public bool SendOrderToTheSystem()
{
//Call the helper methods with the data
//from the private _IOrderHeader, etc. objects
//to update "the system"
}
}
然後,我會消耗這個目標的一些這樣的代碼:
... = new MyVendorCustomOrderParserAndDatabaseUpdater(
customOrder).SendOrderToTheySystem();
我想知道是否有解決獲取數據F的這個問題更好的模式從一種格式,以便它可以在不同的環境中正確使用。
這是一個有趣的觀察。我不是完全符合我的模型,因爲我的數據只需要在一個方向上進行轉換,而且我不需要進行字符串序列化,但是我可以看到哪裏可能有相似之處。 – 2010-09-01 01:41:34
它在「抽象」層面絕對相似,但有點不同「當橡膠撞擊」道路時。 :)在任何情況下,我都沒有意識到你只是在一個方向上進行轉換。考慮到這一點,我認爲一個「映射器」類仍然是處理轉換的好方法。但是你是對的,這使得這個比喻不那麼直接。乾杯! – mikemanne 2010-09-01 14:25:24