2017-04-19 52 views
3

我正在開發一個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互動並保留servicesinternal

在我的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爲了更好的理解。

+0

所有的服務應該暴露一個接口。所有UI視圖模型都應該使用該接口(通常是構造器注入)。實現應該在Composition Root中與其相關的接口連接起來。 – youzer

+0

@youzer你可以請示範代碼幫忙嗎?如果我做得對,我的經理必須轉移到服務,具體的服務必須實現一個暴露在我的圖書館項目之外的接口。我的ViewModels/CodeBehind必須與這些接口交互才能得到結果?你是這個意思嗎?如果是的話,你可以分享一個代碼片段,說明如何使viewModel與接口進行交互,因爲接口的具體實現是內部的(僅限於庫),如果要這樣做,我必須公開具體實現,爲什麼要使用界面? – Aditya10Oct86

回答

0

如圖所示,管理員添加的很少(實際上:沒有)值,那麼爲什麼他們呢? Refactoring明確地談到了這種情況,並建議聯機類重構。

如何添加一層抽象?

這是一個相當廣泛的問題,取決於各種情況,其中最重要的是:您希望通過添加一個抽象層來解決哪個問題?

FWIW,我的書Dependency Injection in .NET包含一個全面的MMVM示例,儘管在WPF中,而不是UWP。