《模式——工程化實現及擴充》(設計模式C# 版)《適配器模式 Adapter》——“自我檢驗”

來源:互聯網
上載者:User
轉自:《模式——工程化實現及擴充》(設計模式C# 版)

http://www.cnblogs.com/callwangxiang/

 

 

MarvellousWorks公司最近開始向大客戶提供後台接入服務,允許客戶通過該服務與其多個線上業務進行B2B整合。

               

大體處理流程如下:

1) 客戶通過訊息佇列將請求以報文的形式發給MarvellousWorks公司的“佇列服務平台”。

2) 為了安全考慮,“訊息平台”的處理邏輯主動從“佇列服務平台”抓取最新提交的報文。

3) 抓取新報文後,“訊息平台”對報文進行拆解,讀取其中的資訊並驗證其有效性。

4) “訊息平台”將拆解並驗證有效地報文資訊寫入資料庫

 

限制:

1)            報文資料均為XML格式,其 XML Schema預先由MarvellousWorks定義並發布,各家客戶遵照執行

2)            由於客戶使用的隊列產品各異,所以“佇列服務平台”計劃支援微軟MSMQ和IBM MQ,後續還可能支援ORACLE的Advanced Queue和BEA的MessageQ。

3)            由於MarvellousWorks的各個線上業務建立時間不同,所以資料庫既有ORACLE、也有MySQL和SQL Server。

 

 

現在由你作為架構師設計“訊息平台”的服務程式。

1、 隊列提供者和資料庫提供者的定義如下:

 

/// <summary>
/// 隊列提供者
/// </summary>
interface IQueue
{
    XmlDocument Peek();
    XmlDocument Dequeue();
}

/// <summary>
/// 各線上業務資料實體的基類
/// </summary>
abstract class EntryBase { }

/// <summary>
/// 這裡為了簡化樣本,將所有業務實體寫如資料庫前轉換為ADO.NET內建的DataRow類型
/// </summary>
interface IEntryDataConverter
{
    DataRow ToDataRow(EntryBase entry);
}

/// <summary>
/// 資料庫提供者
/// </summary>
interface IDatabase
{
    IEntryDataConverter DataConverter { get; set; }
    void Write(EntryBase entry);
    void Write(IEnumerable<EntryBase> entries);
}

 

2、 請用本章介紹的適配器模式設計“訊息平台”處理介面,並用建立一個簡單的原型,通過單元測試驗證你的思路。

3、 由於報文資料種類眾多,請用本章介紹的資料適配機制配合上面的訊息處理介面完成一個資料適配原型,並通過單元測試驗證。

 

提示:

為保持“訊息平台”處理邏輯的穩定,建議考慮Adapter-Adapter級聯的方式,完成報文抓取到訊息入庫的過程

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.