接口:将我现有的具体代码转换为抽象代码

时间:2017-04-19 13:32:10

标签: c# design-patterns interface abstraction

我正在开发一款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主页CodeBehind:

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模式,我的ViewModel也会与我的经理紧密结合。如何添加一个抽象层?这些实体(经理,服务,数据银行)应该是Interface哪些有助于提供抽象?我需要帮助。我已经上传了一个虚拟解决方案。谢谢:))

My Entire dummy solution以便更好地理解。

1 个答案:

答案 0 :(得分:0)

如此处所示,管理员添加的内容很少(实际上是 no ),为什么要这样做? Refactoring明确谈到了这种情况并建议内联类重构。

  

如何添加抽象层?

这是一个相当广泛的问题,取决于各种情况,其中最重要的是:您希望通过添加一个抽象层来解决哪个问题?

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