我对.NET有很深入的了解,但最近一直在使用Python和Ruby。我发现自己在思考如何在Ruby中最好地为需要它们的对象提供依赖关系。在
起初,我并不认为DI和IoC框架需要与依赖项交互,因为动态语言的灵活性(la重新定义、mixin、stub等)。然而,后来,我发现了为什么动态语言中不需要DI/IoC框架。我对所提供的理由不太满意。我希望我能看到一个可以澄清问题的例子。在
在Why are IOC containers unnecessary with dynamic languages中,我们看到一个依赖类(非注入类),比如X
,可以在测试中被存根或模仿。当然,但是这需要我们知道我们的System Under Test
依赖于一个叫做{System Under Test
突然依赖于N
,而不是{N
,而不是{
在DI+Ruby所有东西的goto资源中,LEGOs, Play-Doh, and Programming,我们看到了一个例子,它将一个正在测试的系统子类化以模拟依赖关系。或者,我们可以使用构造函数注入。好的,所以B
依赖于A
。我们调用B.get_dependency
,它为B
提供一个A
的实例。但是如果A
依赖于N
,而这个依赖于{get_dependency
?在
Fabio mentions我们可以使用mixin/monkeypatch。所以X
被混合到N
。但是问题是如果X
依赖于A
,而{
旁注:动态语言中不需要Many users sayDI框架。然而,角度.JS已经从实现一个相当可靠的DI系统中受益匪浅。Angular是基于动态语言JavaScript构建的。这种方法与Ruby或Python相比吗?在
请记住,我不是说我想强制DI/IoC到Ruby、Python等中
虽然许多人认为不需要DI,但我同意您的看法,即确实需要大量的DI;但有时它会与Python提供的其他技术混合在一起。我建议您看看venusian,它可能有点冗长,但是如果您来自.NET,您将看到关系。一句话:金星允许你注释你的方法而不改变它们的行为。因此,您可以编写金星装饰器,这样您的单元测试不会受到影响。^例如,{a2}使用金星来注释视图。在
相关问题 更多 >
编程相关推荐