2014-01-22 160 views
4

我想這是一個相當主觀的問題,所以我會站點一個具體的例子。纏繞或不纏繞

雖然考慮使用System.Management命名空間來封裝對WMI信息的訪問的一組包裝類的設計,但我有一個問題,我開始想知道如何滿足需要一次性值的情況,比如說BIOS編號爲Win32_BIOS,也適用於可能需要許多不同屬性或更復雜搜索的情況,例如搜索CIM_DataFile中的文件。

這讓我想知道包裝System.Management命名空間中提供的功能是否是一個好主意,或者最終是否會以減少數量的名義添加不必要的複雜和冗長的包裝類代碼在應用程序中。

對於這類問題,普遍的共識是什麼?在編寫複雜的包裝類時希望稍後節省時間還是值得的,或者更好地堅持內置類的靈活性,即使它有時似乎並不特別乾淨或整潔。

+1

+1爲好標題 –

+2

你是否在意能夠模擬你正在包裝的課程?如果是這樣,那麼是的。 –

+0

這個問題可能更適合於http://programmers.stackexchange.com/ –

回答

4

包裝類的目的是爲了隱藏調用者的複雜功能。

換句話說,如果所有的調用應用程序想要做的是找出序列號,那麼它應該只是調用像myobj.GetSerialNumber()這將使所有的WMI調用所需的所有返回該值。但是,如果調用應用程序已經深入到WMI中,或者如果您發現自己模仿WMI的工作方式只需稍作更改,那麼最好不要包裝它,讓調用應用程序執行它的操作。

+0

我覺得這對我有很大的意義,但是當我這樣做時,我開始認爲我應該真的把這樣的包裝變成可重用的庫和複雜的雪球。 – Ashigore

+0

@Ashigore:一個給定的代碼庫應該像解決你所面臨的問題一樣複雜。換句話說,只能將其視爲可重用以解決當前問題。如果稍後您發現您的代碼可以在其他應用程序中重用,那麼您可以重構它。實際上,在最初建立用於重複使用的情況下,也就是說,當您已經擁有多個系統並且您知道的規格將會佔據優勢時,情況非常罕見。 – NotMe

+0

我這樣說的主要原因是你完全不知道未來任何系統的要求是什麼。因此,你完全不知道他們可能需要什麼功能。這意味着無論如何,無論如何你都會重構你的圖書館。現在更好地保持簡單,只在實際需要時才引入複雜性;即使這樣也只會引入所需的複雜度。 – NotMe