我正在开发一个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