2014-03-06 61 views
0

我在我的代碼中使用了一個singleton類,它主要負責與設備進行通信。每次訪問單例時調用一個方法

該類中的一個主要功能是ConnectToDevice(),該庫中還有一個名爲IsPhoneConnected()的方法。

所以基本上在任何其他方法被稱爲之前,一個簡單的檢查將連接設備,如果它尚未連接。因此,無論每個方法或每一個客戶端應用程序調用我的圖書館的時候,有人負責書面方式follwoing代碼

(!IsPhoneConnected()) 
{ 
    ConnectToDevice() 
    return IsPhoneConnected() // If phone is not connected, try to connect, if still not connected then return false. 
} 

我不想一次又一次地寫這個邏輯的。我希望班級能夠照顧到這一點,而不必一遍又一遍地調用這段代碼。

有什麼想法?

+0

命令模式?不是很清楚你在這裏尋找什麼...... – Wain

+1

Can;你可以在單身人士的'ConnectToDevice()'裏面放置IsPhoneConnected()嗎? – Szymon

+0

我可以。但是每個函數都會調用ConnectToDevice(),是否正確?我想最大限度地減少必須調用ConnectToDevice() – TeaLeave

回答

2

如果任何給定功能需要要連接的手機,它必須是交互在已有的方式連接單類。

在這種情況下,無論代碼如何與單身內的電話進行交互,都可以調用ConnectToDevice()(如果它尚未連接)。

但是,如果你真的想要執行每次一組函數被調用的方法,而不必每次都顯式調用,然後你在談論的是編程面向方面。

這種範例不是C#原生的,但可以使用工具如PostSharp來模擬。

有關如何使用PostSharp將代碼添加到您的代碼的一個很好的教程,看看this CodeProject文章。

你可能最終的東西,如:

[PhoneConnectedAspect] 
private void DoStuffWithPhone 
{ 
    // your code here 
} 

標記有屬性可以自動調用ConnectToDevice()方法,例如任何方法。

+0

非常感謝您的意見。他們非常有幫助。然而,無論如何,在類級別而不是方法級別[PhoneConnectedAspect],以便編譯器知道這個方面正在爲每個類的方法注入? – TeaLeave

1

像Baldrick說的:這聽起來有點像面向方面的編程。不過,如果在庫上調用任何方法需要連接電話,我會將ConnectToDevice嵌入到庫本身中。例如。只需將其嵌入到需要連接電話的圖書館的每種方法中即可。

AOP會更好,但是這可以模擬它。

相關問題