2010-07-12 59 views
0

我有內置網絡win.forms(點擊一次)應用程序與自定義內置報告模塊(40 + WinWord & Excel報告)。模塊處於分離的程序集並通過接口抽象出來。我們有資源並繼續支持它。幫助重構傳統的自定義報告模塊

常用接口看起來像:

IReportProvider { 
    // introspection stuff 
    IEnumerable<ReportCategoryInfo> GetReportGroups(); 
    IEnumerable<ReportInfo> GetReports(Guid categoryId); 
    ... 

    // common function 
    ReportResult CreateReport(Guid reportId, ReportParamCollection prms, ..) 
} 

ReportInfo介紹基本信息需要&參數。用戶界面是自動生成的,讓用戶選擇報告參數。

class ReportInfo { 
    public Guid Id { get; set; } 
    public string Title { get; set; } 
    public List<ReportParameterInfo> Params { get; set; } 
    ... 
} 

和ReportResult提供二進制報告表示以及二進制類型(是否Word2003中,Excel2003中,e.t.c)

class ReportResult { 
    public byte[] Document { get; set; } 
    public ReportType DocumentType { get; set; } 
    public List<string> Warnings { get; set; } 
    ... 
} 

沒有認證要求和字/ EXCEL表示是必須的。 PDF不受歡迎。

問題是 - 每次添加/更正報告時,我們都會更新報告模塊併發布新的應用程序版本(因爲它們被捆綁在一起)。

我想:

  • 避免新的應用程序版本時報告更新。
  • 我們還必須將Intranet Web界面添加到報告中。

我要重構當前的代碼方式如下:

  • 提取報告功能爲單獨的WCF服務
  • 認沽報告模板文件(EXCEL & Word模板)進行申請,並把到文件夾只能通過報告服務訪問。
  • 新的WCF服務將提供內省接口(什麼報告存在和需要哪些參數)和方法來檢索二進制報告表示(word或excel)
  • 應該有與WCF服務進行通信,兩個客戶端:Win.Forms爲目前的客戶端和Web之一。客戶端將提供報告導航UI界面,讓用戶填寫參數並接收報告文件。 Win.Forms客戶端將執行WinWord或Excel以顯示收到的報告。

您對此有何看法?

回答

1

首先:內聯網win.forms?你在談論一個ClickOnce WinForms應用程序,一個MSIE託管的WinForms應用程序,一個帶有嵌入式Web瀏覽器的WinForms,或者更奇特的東西?我假設你實際上有一箇中央數據存儲區,否則你的Intranet web界面將不會發生......

這真的取決於你的WCF服務的接口(或者你選擇的任何方式主機和接口你的服務邏輯)。你還沒有真正描述過它們。一些需要思考的問題:

  1. 它是一個純粹的基於數據的服務,還是它執行一些用戶界面處理?後者越多,對Office和Web報告的支持就越差......在一個極端情況下,每個報告都必須有兩個版本。然後當你想添加例如單獨的網頁版本的移動界面?
  2. 您可以將服務的報告與服務分離嗎?相同的服務可以支持多個報告嗎?
  3. 數據接口是矮胖還是健談?矮胖的界面通常會更好地擴展,但是你用簡單的查詢來付出代價(因爲你需要傳遞比大多數報告所需要的更多的數據)。
  4. 您是否有用戶認證和授權要求?是否有隻有部分用戶可以看到的報告或數據?
  5. WinWord和Excel是一個需求還是遺留問題?用戶是否真的需要可編輯的文檔:如果沒有,Web界面是否足夠,或提供PDF文件的服務?一般來說,Office的整合並不總是最容易支持的選項,特別是一旦下一個Office版本或服務包打你,或最終用戶開始使用他們的模板修補...

我擔心有些是你讓WCF服務知道甚至處理報告模板文件(模板目錄,自省接口)。爲什麼?模板只依賴於數據檢索服務會不會更清潔?不管怎樣,你是否不會與網絡報告發生關係?

+0

謝謝你的迴應。我提供了一些細節,請看看它。 – 2010-07-13 05:50:23