當沒有任何實現細節可用於代碼的當前範圍時,應使用接口。爲什麼要抽象數據訪問層?
當您可以使用一些實現細節時,應該使用摘要。
查詢 - 爲什麼仍然需要這些條款?爲什麼Business對象不能直接與DataAccess.SqlServer Layer進行通信?
當沒有任何實現細節可用於代碼的當前範圍時,應使用接口。爲什麼要抽象數據訪問層?
當您可以使用一些實現細節時,應該使用摘要。
查詢 - 爲什麼仍然需要這些條款?爲什麼Business對象不能直接與DataAccess.SqlServer Layer進行通信?
當沒有任何實現細節是 可用於代碼的當前範圍時,應使用接口。
不是。你所指的是封裝。有「信息專家」的概念。只有知道如何做某事的班級應該是這樣做的班級。接口用於多態和解耦。當消費代碼想要以同樣的方式處理某些類型的對象時,該代碼可以以相同的方式將所有這些對象用作接口類型。
當一些執行細節 提供給您
我不知道你的意思在這裏文摘應該被使用。我覺得你很困惑,因爲這聽起來不對。抽象類的使用方式與接口相同,只是它們允許在其中實現。
查詢 - 爲什麼仍然需要這些條款?爲什麼業務對象 不能與DataAccess.SqlServer層直接通信?
它們可以但是以可維護性,靈活性和可測試性爲代價。如果要將數據層替換爲另一個數據層,則不能這樣做,因爲消費代碼對當前數據層有直接依賴關係。如果你想單元測試你的邏輯,你不能沒有擊中數據庫。如果您將數據庫類放在接口後面,則可以在單元測試中模擬數據層,並測試您的邏輯類而不碰到數據庫。
非常簡短的例子
public Foo FooLogic
{
IFooData fooData = DataAccessFactory.GetDataClass<IFooData>();
return fooData.GetFoo();
}
現在你的邏輯類不依賴於特定的數據類。工廠可以返回一個真正的FooData實現,或者它可以返回一個模擬數據對象,或者可以放置一個新的數據訪問層,而不會影響邏輯類中的代碼。
更好的分層,更好的抽象,更鬆散的耦合 - 需要我繼續嗎? – duffymo
對不起老兄...這太開放了...你可能會把這個問題關閉,因爲這個問題太開放了......但對於duffymo而言,鬆耦合是一個主要原因......如果你問這個問題,我懷疑你從來沒有經歷過大型項目重構的困境。 – Rikon
我認爲你的問題會更適合http://programmers.stackexchange.com/ – Fabio