依赖注入和代码可维护性

JLX*_*JLX 8 asp.net maintainability dependency-injection

我正在使用接口来提供依赖注入的(vb.net/asp.net)项目.但对我来说,感觉代码的可维护性已被杀死.当我想阅读代码时,我不能简单地跳转到使用的相关类的代码.我所看到的只是接口,因此我必须通过项目来查找正在执行的类.这真的伤害了我的生产力.

是的,我知道我现在可以使用各种替换类来实现接口.但是,例如,我知道我不会很快改变我的数据源 - 我没有必要启用交换它的能力.所有这些依赖注入对我来说似乎有些过分(事实上,它唯一真正的原因是支持模拟类进行单元测试).我实际上已经读过几个地方,说DI实际上更适合可维护性.但这假设您已经知道一切都在哪里,并且您知道需要更新哪个类.找出去哪儿看是杀死我的部分.

所以,我的问题是:是否有更好的方法来遍历代码?有没有更好的方法使代码更易于维护?我们只是做错了吗?或者这是课程的标准?

Nad*_*zie 5

DI肯定会有一些开销,特别是当您的配置与代码分开时.虽然这课程的标准,但随着时间的推移,它会更容易处理,并且随着您对代码的更好理解.

但是,工具,可以帮助-看一看ReSharper的的CodeRush.两者都为Visual Studio中的代码导航体验提供了极好的改进.Resharper具有出色的"Go To Symbol""Go To Implementation"方法,可以快速帮助您导航到界面的实现,无论它在哪里.

约可维护性点:一般情况下,一个松耦合的设计随着时间的推移更加重要,因为有改变.代码越紧密耦合,在不影响整个应用程序的情况下进行小的更改就越困难.这取决于接口非常重要 - 无论您是否选择使用依赖注入.

  • 它确实有帮助,但可能不适用于您的应用程序.如果所有接口总是暴露与实现完全相同的行为集,那么是的,实现和接口之间几乎没有区别.接口本身不会神奇地改进您的设计,它们只是设计松散耦合组件时的必要工具. (2认同)
  • 此外,如果你无法理解你正在使用的代码而不进入接口的实现,那么这是一个不同的问题.例如,我知道IList有一个`Add`方法 - 如果在使用实现`IList`的类时,我需要知道如何实现`Add`,那么我的类依赖于`IList`的_implementation_而不是`IList`界面.设计组件以使它们对实现没有这种依赖性是重要的.这使您可以安全地更改您的应用程序 (2认同)