摘要:隨著設計模式廣泛的被業內認可,越來越多的人認識到其重要性,并致力于設計模式的研究。該文通過介紹適配器模式在ERP系統與CRM集成的重要性,論述了設計模式在ERP系統與CRM集成的實現過程,說明了設計模式的運用還值得進一步研究。
關鍵詞:ERP;CRM;適配器模式;系統集成;軟件復用
中圖分類號:TP311 文獻標志碼:A 文章編號:1009-3044(2008)23-1346-03
Application and Research of the Adapter Pattern On System Interface
PENG Yang1,PENG Jun-feng2
(1.Hunan International Economics University, Changsha 410205, China; 2.Hunan CopoteE Science Technology CO.LTD, Changsha 410000, China)
Abstract: As design patterns are gaining widespread acceptance at industrial level, efforts research them. especially design pattern arouse the attention of people. This paper presents the importance of adapter pattern in integration between the ERP system and CRM system. which are implemented in integration between the ERP system and CRM system, are elaborated. Finally, it points out that more research of using design pattern is needed.
Key words: ERP; CRM; adapter pattern; system integration; reusable software
1 引言
設計面向對象的軟件比較困難,而設計可復用面向對象的軟件就更加困難。你必須找到相關的對象,以適當的粒度將他們歸類,再定義類的接口和繼承層次,建立對象之間的基本關系,為此提出設計模式這個概念[1]。設計模式簡化了軟件的設計和過程的實現,使軟件系統的基礎架構更加清晰,因此在諸多大型軟件系統的設計過程中,設計模式都成為重要的輔助手段,如:一些大型企業的CRM(Customer Relationship Management),OA(Office Automation),ERP(Enterprise Resources Plannig)系統等。文章以國企信息化為例,運用Adapter模式解決了我方開發的CRM與ERP 的接口問題。
2 設計模式
所謂模式(Pattern),起源于建筑工程設計大師Christopher Alexander關于城市規劃和建筑設計的著作[2,3]。它指在特定的場合(Context)下,對特定問題的慣用解決方案。并由Erich Gamma, Richard Helm等幾位設計模式先行者引入到軟件設計領域。涉及結構型、創建型、行為型3大類以及由其派生出的23個經典模式。設計模式是對被用來在特定場合下解決一般設計問題的類和互通通信的對象描述。一個設計模式的命名,抽象確定了一個通用設計結構的主要方面,這些設計結構能被用來構造可復用的面向對象設計,并且每一個設計模式都集中在一個面向對象的設計問題或設計要點[4],見表1。
2.1 設計模式的基本要素
在設計模式的定義中,我們可以看到一個設計模式應該有如下四個基本要素[4]:
1)模式名稱:一個助記名,用一、兩個詞來描述模式的問題、解決方案和解決效果。這個名稱便于我們編寫文檔、與他人交流設計思想和設計結果。
2)問題:描述應該在何種情況下使用模式。它解釋設計問題和問題產生的前因后果,可能描述一個特定的設計問題。有時還描述使用此模式必須滿足的先決條件。
3)解決方案:描述針對該類問題設計的組成部分,以及它們各自的職責、相互關系和協作方式。它所提供的是設計問題的抽象描述和如何用一個一般意義的元素組合來解決此問題。
4)效果:描述模式應用的效果及應用時應權衡的問題。描述此模式的應用對系統靈活性、可擴展性和可移植性的影響。
3 Adapter模式
適配器模式有類適配器模式和對象適配器模式兩種不同的形式,其用意是將一個類的接口轉換為客戶希望的另外一個接口[5]。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。如圖1所示,模式涉及角色有:
1)目標(Target)角色,即所期待得到的接口。
2)源(Adaptee)角色,即現有需要適配的接口。
3)適配器(Adapter)角色: 適配器類是本模式的核心,適配器類是本模式的核心,適配器把源接口轉換為目標接口。


如圖2所示,與類適配器模式一樣,對象的適配器把被適配的類的API轉換為目標API。與類適配器模式不同的是,對象適配器模式不是使用繼承關系連接到Adaptee類,而是使用委派關系連接到Adaptee類。通常,在下述情況下使用適配器模式[3,7]。
1)系統需要使用現有的類,而此類的接口不符合系統的需要。
2)想要建立一個可以復用的類,用于一些彼此之間沒有太大關聯的類,包括一些可能在將來引進的類,并且一些源類不一定有很復雜的接口。
3)想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配他的父類接口(僅適用于對象Adapter)。
4 設計模式的實例
結構型模式采用繼承機制來組合接口或實現,包括適配器、橋、裝飾、享元等六個模式[6]。而在CRM與ERP接口中,結構型模式之適配器模式將有很典型的應用。
4.1 基于適配器模式的設計
在CRM系統的單位客戶管理模塊中,包括單位1客戶資料;2組織機構;3購買歷史;4服務歷史;5關鍵決策者等功能。并且許多場合下都需要對單位客戶資料進行維護。例如: 客戶姓名,單位名稱,地址,聯系方式,傳真等。這些功能目前在ERP中已經實現,但是根據客戶的個性化需求,需要對客戶進行資質評價(按信用等級),如圖5所示:ERP系統接口類ERP_Managerment提供了取得客戶姓信息的GetCustomerDetail()方法。CRM的CRM_Managerment類也提供了GetCustomerDetail (in isEstimate:bool ; in Estimate: int)方法。顯而易見,上述將導致運ERP 系統和CRM 系統的接口不一致。為了適應統一的接口,采用了適配器模式讓Merge_Managerment類繼承雙方的方法。實現思路如下:
Public class Merge_managerment: Crm_ managerment
; ERP_ managerment
{
Private Crm_ managerment_Interface;
Public Merge_ managerment (Crm_ managermen r)
{
_Interface=r;//接口定義
}
Public override char GetCustomerDetail ()
{
Return _Interface.GetCustomerDetail (Flag; estimate);
}//判斷是對給客戶資質進行評價,且評價等級為第幾等。
Public override char GetOrganize ()
{
Return _Interface. GetOrganize ();
} //取得組織機構信息
Public override char GetPurchaseHistory ()
{
Return _Interface. GetPurchaseHistory ();
}//取得購買歷史信息
Public override char GetServehistory ()
{
Return _Interface. GetServehistory ();
} //取得服務歷史信息
Public override char GetDecision ()
{
Return _Interface. GetDecision ();
}//取得決策者信息
…… //取得其他信息
}

在實際應用中,不同的模式可能經常一同使用。在上面我們可以看出橋模式是分離抽象化和具體化,使得二者接口可以不同。而適配器模式的目的是要改變已有的接口,讓他們可以互相兼容,以使兩個沒有關系的類能夠在一起工作。
5 結束語
實踐證明,將Adapter模式引入到系統結口設計中,有效提高了軟件系統的開發效率,保證代碼的可重用性和系統的可擴展性。由于篇幅的限制,本文只給CRM與ERP系統繼承的一個實例,其它基本關系、關系性質在設計模式中是通用的。設計模式的產生使軟件設計人員可以借鑒他人的成功經驗找到軟件架構設計的解決方案。既可將其應用于整體的軟件架構設計,也可以應用于軟件中的某一部分的微體系結構設計。對于設計模式的理解和運用需要我們在實踐中不斷的摸索與總結。
參考文獻:
[1] Metsker S J.Design Pattern in C#[M].北京:中國電力出版社,2005:2-26.
[2] Alexander,Christopher. A Timeless Way of Building[M].New York: Oxford University Press,1979.
[3] Alexander,Christopher. A Pattern Language[M].New York: Oxford University Press,1977.
[4] Gamma E, Helm E.Design Pattern[M].北京:機械工業出版社,2000,(9):1-28.
[5] 楊睿,姚淑珍.設計模式復用支持系統的設計實現[J].計算機工程,2004,(1):84-86.
[6] 易燕,周騁,戴祝英.運用設計模式實現數據持久層框架[J].計算機工程與設計,2005,26(12):207-209.