2009-04-15 39 views
3

我們有一個由多於一個客戶端應用程序使用的DLL形式的核心庫。它已經變得有些臃腫,一些應用程序只需要DLL提供的一小部分功能。所以現在我們正在考慮將這個巨獸分成更小的組件。在C++中將實用程序DLL拆分爲更小的組件

我的問題是:誰能推薦一個路徑採取這種臃腫的DLL分成一組具有一定interdepencies但不一定要求所有其他模塊的模塊?

以下是選項,我看到他們,但我希望有人可以提供其他的可能性:

  1. 創建一個「核心」的dll和使用核心和其他可能的附屬DLL幾個「衛星」的dll 。
  2. 細分臃腫DLL的內容插入到不希望使用臃腫的版本可以組裝,他們需要爲自己的DLL或成靜態庫靜態庫主DLL使用(保持相同的功能),但是應用程序應用程序本身。

我一直在猶豫地提到這一點,但我認爲注意到應用程序使用MFC可能很重要。

感謝您的想法。

回答

1

而不必所有的細節這是一個有點難以幫助,但這裏是我會在你的情況做

  • 爲您提供釋放whate3ver的靜態和DLL版本 - 爲MT和單線程的。
  • 試圖從不同的客戶那裏收集哪些項目應該組合在一起以提供合理的分段 - 而不需要依賴層。

有一個「核心」模塊聽起來像個好主意 - 並確保您沒有太多的依賴關係 - 您可能想保持簡單。

你可能會發現練習後,一個大的dll實際上是合理的。

另一個考慮是,維護多個DLL和靜態庫和DLL,將極大增加了維護的複雜性。

你將要釋放他們都在每次一次,或者他們要被混搭?這裏要小心 - 並且知道問題

您可以創建測試如果沒有人抱怨DLL的大小,那麼你可能要考慮把它當作是。

+0

我傾向於同意你的最後一點。有一個特定的客戶希望自定義版本的應用程序的功能更少,但也小得多。我會非常樂意將它們說出來,因爲這會導致很大的麻煩。 – Karim 2009-04-15 16:02:18

2

與你的問題有點相關的是這個問題,關於將一個非常大的C模塊拆分成更小的問題。

How do you introduce unit testing into a large, legacy (C/C++) codebase?

看來你的問題有突破一些大型Blob的代碼放到一個更加模塊化系統的更大的問題做。上面的鏈接絕對是推薦閱讀。

+0

這肯定是其中的一部分,但它有很多與依賴關係的複雜性和多麼困難將是一個DLL環境對一個靜態庫,以保持這也做。有很多未知因素,我希望有人能指導我。 – Karim 2009-04-15 16:03:45