2017-06-19 25 views
1

假設我有下面的類層次結構庫:我應該在哪些地方爲類似的類組添加通用功能?

interface IDevice 
{ 
    void Connect(DeviceAdderss address); 
    void Disconnect(); 
} 

public abstract DeviceBase : IDevice 
{ 
    // IDevice implementation plus other stuff 
} 

public DeviceA : DeviceBase 
{ 
    // Some device A specific stuff 
} 

public DeviceB : DeviceBase 
{ 
    // Some device B specific stuff 
} 

現在,我想在我的WPF應用程序中使用這個庫。例如,我需要向每個設備添加一些命令(ICommand對象:RelayCommand或其他)。此外,我想以相同的方式使用WPF應用程序中的所有設備(即它們都必須實現相同的接口或具有相同的基類)。

所以問題是:我應該在哪裏添加額外的「wpf」功能?

我可以看到2種可能的方法:

1)將這個功能的iDevice或DeviceBase - 但我不喜歡這樣,因爲庫可以在不同的應用程序(的WinForms,控制檯等)一起使用,所以在某些情況下它是不需要的。

2)建立在我的WPF應用程序「包裝」類,像這樣:

class DeviceWrapper<T> : INotifyPropertyChanged 
    where T : DeviceBase 
{ 
    public T Device { .. } 
    public ICommand ConnectCommand { .. } 
    public ICommand DisconnectCommand { .. } 
    //... other stuff 
} 

這種方法看起來更好,但在這種情況下,我必須創建太多類似的包裝(如果設備有一些輕微不同之處)...

回答

0

如果從DeviceBase繼承的所有設備不需要共享功能,請將責任分配給接口的額外功能,並根據具體情況在接口上實現這些接口需要它們的設備。

+0

謝謝,但所有設備都需要共享功能,只需在設備間進行小改動即可。 – kurchavy

+0

在這種情況下,我會按照您的方法2創建Wpf專用設備類,這些設備類是Wpf應用程序內部的內容,而不是代碼庫,它擴展了標準設備類的功能,僅使用Wpf應用程序所需的功能。 –

相關問題