我正在開發一個UWP應用程序。我有一個擁有經理和服務的PCL。我的經理與我的服務互動並提供輸出。在我的服務中,我使用異步等待調用與我的API交互。我創建了一個虛擬解決方案。代碼如下:接口:將我現有的具體代碼轉換爲抽象代碼
我的虛擬管理器:
public class AccountManager
{
public string uniqueId { get; set; }
public int GetAccountId()
{
Services.AccountServices HelloAccount = new Services.AccountServices();
return HelloAccount.GenerateAccountId(uniqueId);
}
}
public class DummyManager
{
public ICollection<string> GetDeviceNames(int accountId)
{
Services.NameService MyNameService = new Services.NameService(accountId);
return MyNameService.ProvideNames();
}
}
我的虛擬服務:
internal class NameService
{
public NameService(int Id)
{
AccountId = Id;
}
public int AccountId = 0;
public ICollection<string> ProvideNames()
{
return new List<string>()
{
"Bob",
"James",
"Foo",
"Bar"
};
}
}
internal class AccountServices
{
public int GenerateAccountId(string uniqueID)
{
return 11;
}
}
現在,我有我的業務和管理人員相同的結構,因爲我用他們,下面是我如何與我的Public Managers
互動並保留services
internal
:
在我的UI的MainPage代碼隱藏:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
DataServices.Managers.AccountManager Hello = new DataServices.Managers.AccountManager();
Hello.uniqueId = "AsBbCc"; //fetched from another service.
var id = Hello.GetAccountId();
DataServices.Managers.DummyManager Dummy = new DataServices.Managers.DummyManager();
var names = Dummy.GetDeviceNames(id);
}
我的問題是目前我的MainPage很緊密結合我manager
即使我使用MVVM模式,那麼我的視圖模型將被緊耦合與我的經理。我如何添加一個抽象層?這些實體(經理,服務,數據庫)應該是一個Interface
,它有助於提供抽象?我需要幫助。我已經上傳了一個相同的虛擬解決方案。謝謝:)
My Entire dummy solution爲了更好的理解。
所有的服務應該暴露一個接口。所有UI視圖模型都應該使用該接口(通常是構造器注入)。實現應該在Composition Root中與其相關的接口連接起來。 – youzer
@youzer你可以請示範代碼幫忙嗎?如果我做得對,我的經理必須轉移到服務,具體的服務必須實現一個暴露在我的圖書館項目之外的接口。我的ViewModels/CodeBehind必須與這些接口交互才能得到結果?你是這個意思嗎?如果是的話,你可以分享一個代碼片段,說明如何使viewModel與接口進行交互,因爲接口的具體實現是內部的(僅限於庫),如果要這樣做,我必須公開具體實現,爲什麼要使用界面? – Aditya10Oct86