2013-03-12 67 views
1

我開發了一個VSTO 4.0加載項,專爲將我們的業務應用程序集成到Microsoft Word中而設計。在製作加載項中編寫的代碼是我希望重新用於Microsoft PowerPoint的新插件的迷你框架。主要問題是Word和PowerPoint界面(例如,Microsoft.Office.Interop.Word.Table和Microsoft.Office.Interop.PowerPoint.Table)沒有共同的祖先,但我需要創建一個通用API插入,更新,表格和圖表等,它們將被標準化以與Word和PowerPoint對象一起工作。我應該選擇什麼設計原則/模式?我應該選擇什麼設計原則/模式?

using Word = Microsoft.Office.Interop.Word; 

public class ReportHolder 
{ 
    public ReportHolder(Word.Document document) { ... } 

    public void AddTable(Word.Range range) { ... } 
} 

回答

1

如果您無法在應用層次級別找到通用接口,則需要實現令人滿意的泛化,則至少有兩個選項可供選擇。

第一個選項是實施strategy pattern併爲策略定義自己的界面。一旦你這樣做了,你可以編碼到戰略界面的定義,然後在每個戰略類別代碼中爲單詞,excel,power-point等類型指定邏輯。一旦你有所有的戰略類,你可以實現一個factory pattern獲得您正在尋找的代碼重用。

第二種選擇是將更多的泛型類型對象用於接口和類型對象引用等函數的參數。一旦你這樣做了,你可以利用.net框架中的反射類對特定對象進行類型檢查,然後處理每個特定的情況。

最後,在研究這些替代方案或任何其他方法之前,我會建議您深入研究msdn文檔,以瞭解.net的辦公互操作性框架的整體架構,以確定您是否可以進行有效的概括,以及現有的模式是代碼重用。我也知道後期綁定在整個框架中被廣泛用於這個目的,它可能是一個很好的開始。這裏是一些額外的參考資料。

Late Binding In Office Solutions

Writing Code In Office Solutions

享受!

+0

謝謝,我的一個版本是一個帶有System.Object簽名的版本,但由於我的輸入較弱,所以它不適合我。 – Tenere 2013-03-13 04:45:51

3

這聽起來像你正在尋找Adapter模式:我用類的實例在下面給出。

另一種方法可能是讓你的框架通過你自己的一組類來以抽象和通用的方式來處理它的功能。然後有兩種不同的渲染內容的策略(兩個獨立的渲染器,一個用於Word,一個用於Powerpoint)。

+0

謝謝,我真的想爲Word和PowerPoint製作兩個單獨的實現,但我需要一個基本的抽象層,它將它們聯合起來。 – Tenere 2013-03-13 04:42:13