我在寫一個Active Directory包裝器,試圖遵循SOLID和其他最佳實踐。界面目前是「IActiveDirectory」。如何防止泄漏抽象?
我現在的問題是,實現ActiveDirectory必須實現IDisposable來處置創建和處理這個包裝內的一些資源,我不知道如何解決這個問題,而試圖編碼到接口等等......我不想創建一個漏洞抽象(即裝飾IActiveDirectory w/IDisposable)。我不能將服務細化(即將方法調用創建/處理資源的範圍設置爲方法調用),這是由於底層的依賴關係。
我目前有一個工廠,以便IActiveDirectory的消費者可以創建一個按需,但我需要一個乾淨,方便的方式讓消費者用信號完成資源。
如何在不泄漏資源包裝的抽象的情況下向消費者提供合同(即接口)?我應該公開實現sans一個接口嗎?我的消費者或我的DI容器是否有辦法管理此服務的生命週期?
「我需要一個乾淨,方便的方式讓消費者用信號完成信號。」 - 這正是「IDisposable」的意思。你不能抽象所有*。 – delnan
是的,我知道這正是IDisposable是什麼,我沒有問題把它放在具體的類。然而,我不喜歡把它放在一個接口上,因爲我創建了一個漏洞抽象,我假設所有的實現都需要一個Dispose方法調用,違反了Liskov。你認爲只是將具體的sans接口暴露出來會更好嗎? –
這是完全有效的,在LSP和其他條件下,「Dispose」什麼也不做。把它放在一個接口上並不意味着假設所有的實現都需要配置(任何不能簡單地添加'void Dispose(){}')的實現,這意味着假設*一些實現需要配置(這是真實的)。 – delnan