2011-11-15 43 views
0

我目前正在構建一個Web應用程序,它將從數據庫獲取一些信息,並用該信息替換Word文檔中的某些文本。然後文件將被保存到預定義的位置。.NET MVC:在許多未編譯的.cs文件中運行一段代碼?

現在的問題是,當開發開始時,我們正在談論5個文檔,但現在我們正在研究20多個文檔,並且文檔可能會隨時間而改變。我的初衷是爲每個文檔「硬編碼」類。但現在,這似乎是一個非常愚蠢的想法。

該方法的簽名可能類似於:void Generate(string template, string outputFileName);。這是如何以最好的方式完成的?假設我創建了一個接口IGenerator,它定義了生成方法和描述當前「插件」的一些方法。然後,我可以簡單地將.cs文件(或dll)與一個類在某個目錄中實現該接口然後讓應用程序找到所有這些並讓用戶選擇一個?

編輯:有沒有一種很好的方式來添加/編輯/刪除這些Document類 - 而不必重新編譯整個應用程序或庫與所有類?我希望每個文檔類都能代表自己。我讀過這article,這可能是我的最佳選擇?

謝謝。

回答

0

我會考慮使用工廠模式來生成您的文檔實例,如果您需要處理不同的文檔類型,那麼請考慮使用Document抽象類來公開可從文檔中獲取數據的可替換方法。

然後,您編碼來處理Document類而不是特定的子類,因爲其餘代碼不關心文檔是什麼,只是它處理一個。

然後,您需要實施Document子類以應對不同的文檔類型(Word .doc,.docx; Excel,Text等),並使用Document工廠生成正確類的實例您傳遞一個變量以確定創建正確的Document子類。

如果您要在任何時間存在多個文檔,那麼您將它們的實例存儲在List<Document>中。

編輯

那麼這裏是基於到目前爲止你已經說出了我的想法。 您確實只處理Office文檔,因此您可以使用Office SDK,在這種情況下,您需要加載相應的庫,或者如果您堅持使用Open XML格式的文檔,則可以自行生成它們。

查看here瞭解Office文檔格式的信息。

在任何情況下,您都會處理說一個Word文檔或Excel文檔,但您可能有一個Word文檔的多個佈局。

如果你編寫你的文檔類來接受某種排序的模板信息,那麼你可以將它以XML格式存儲在數據庫或配置文件中。

如果存儲在配置文件中,則將其作爲來自您的web.config的數據源引用。

<appSettings datasource="different.config"/> 

這種方式可以使存儲內different.config更改appSettings需要重新啓動你的網頁。

+0

謝謝。我現在意識到我的另一個問題在原文中有點隱藏。仍然存在的問題是這些文檔可能會改變/更多可以添加等等,所以我還要求一種改變/編輯/添加新的'Document'類的好方法,而不必重新編譯比實際更多的需要。原始帖子更新了更多信息。 – JLe

+0

對於您正在處理的文檔,我還有點不確定。當你說「這些文件可以更改/更多可以添加」你的意思是文件的類型?它們有什麼不同 - 佈局,顯示方式,數據庫字段?他們都是Word文檔,不是嗎? – ChrisBD

+0

Word和Excel文檔。這些可以是信件,PM,項目計劃,說明等等。從一開始就會有一個下午,一個計劃等等。現在看起來他們將能夠「在這裏我想能夠生成另一種類型的(Word-)文檔」。所以我必須爲每種類型(PM,字母等)構建一個類,以從數據庫中提取所有信息並將其放入文檔中。現在的問題是,在我「完成」一週後,他們可能會說「我們需要一種新類型的文檔」。因此我正在尋找一些不錯的插件平臺,這樣我只需要上傳一個文件而不需要重新編譯。 – JLe

相關問題