C# 依赖项注入-在web环境中,将逻辑类与依赖项解耦的最佳方法是什么服务呼叫、cookie、URL等

C# 依赖项注入-在web环境中,将逻辑类与依赖项解耦的最佳方法是什么服务呼叫、cookie、URL等,c#,javascript,browser,dependency-injection,C#,Javascript,Browser,Dependency Injection,在我的逻辑类中,我有对web服务的ajax调用,我将内容存储在cookie中,从uri查询字符串中获取信息,并向用户显示消息 将逻辑类与这些依赖项解耦的最佳实践是什么 我的环境: 我正在使用SharpKit(C#到javascript编译器)进行开发,所以我用C#编写代码,最终我的代码编译成纯javascript并只在浏览器上运行(没有服务器端代码) 起初,我想把它们包装成两个存储库:一个用于ajax调用,另一个用于浏览器所有交互(cookie、URL、消息等) 现在看起来是这样的(没有DI):

在我的逻辑类中,我有对web服务的ajax调用,我将内容存储在cookie中,从uri查询字符串中获取信息,并向用户显示消息

将逻辑类与这些依赖项解耦的最佳实践是什么

我的环境: 我正在使用SharpKit(C#到javascript编译器)进行开发,所以我用C#编写代码,最终我的代码编译成纯javascript并只在浏览器上运行(没有服务器端代码)

起初,我想把它们包装成两个存储库:一个用于ajax调用,另一个用于浏览器所有交互(cookie、URL、消息等)

现在看起来是这样的(没有DI):

我把所有浏览器的东西都放在一个回购协议里有意义吗? 另一方面,Cookies和查询字符串在我看来就像另一个数据源

你觉得怎么样

另一个问题: 你将如何分层这种应用程序

ajax调用似乎是数据层 控制器是逻辑层 和浏览器(cookies、url、消息)的UI层

目前,它与MVC一起工作,如下所示: 控制器进行ajax调用并用数据填充模型, 模型是单向数据索引到包含所有显示对象(文本框、网格等)的视图 视图负责视图逻辑,如渲染、悬停、单击等。。并将事件激发到控制器中


最后,我想测试控制器,所以我想开始使用DI,什么是
服务
CookieHelper
,以及
UriHelper
?具体的类或接口?既然您正在编写客户端应用程序,为什么不直接用Javascript和AngularJS编写呢?AngularJS有内置的DI,一种MVCish体系结构,并支持TDD/单元测试。@MarkSeemann这些都是当前的具体类,我想改变这种情况,将它们放在抽象的后面,因为我不想知道数据从何而来,我只想拥有类似CustomerRepository的东西。关于转向Angular,我很想试一试,但这不是我的决定,我只是在这里工作:)说实话,为这么大的客户端应用程序维护一个c#代码实际上相当不错。作为第一步,您可以尝试从这些具体类中提取一些接口,但这可能不会带来太多好处:如果您“想测试控制器”,更好的选择是使用TDD开发代码。对于单元测试,“最终”通常意味着“永远”。一般来说,抽象“泄露”实现的知识越少越好。然而,一个泄露的名字很可能是你最不关心的。在这一点上,我认为我能给出的最好建议是从客户机需要的内容中提取接口,而不是从具体类公开的内容中提取接口。正如所解释的,接口属于使用者,而不是服务。
public class CustomersScreenController
{    
    public CustomersScreenController(
        Services services,
        CookieHelper cookieHelper,
        UriHelper uriHelper)
    { ... }    
}