2017-04-19 20 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。