c#发展

首页 » 常识 » 诊断 » C开发者一定要避免程序中大量的依赖,而
TUhjnbcbe - 2025/5/18 18:49:00

01第一节:什么是依赖?

ASP.NETCoreMvc中的依赖与我们现实生活中的依赖含义是一样的,例如,小明是个小孩子,需要靠爸爸和妈妈的抚养才能长大,因此,小明就依赖于爸爸和妈妈。再比如,小强在IT公司上班,那么小强的收入就依赖于公司或工作。小强不工作,就没有收入,只有工作了才有收入,因此,小强和工作之间存在依赖关系。而在C#程序中,类和类之间也存在依赖,例如:在C1类中使用到了C2类,那么C1类就依赖于C2类。代码如下:namespaceYidosoft.Edu.CoreMvc.Test{publicclassC2{publicvoidRun(){Console.Write(这是C2类。);}}}这个类是C2类,其中有一个Run()方法,并输出一段文本信息。namespaceYidosoft.Edu.CoreMvc.Test{publicclassC1{publicvoidGO(){C2c2=newC2();c2.Run();}}}此时,在C1类中实例化了C2类,并还调用了C2类中的Run()方法。这个时候,C1类的正常运行是依赖于C2类的,也就是C1依赖于C2。

02第2节:依赖倒置

如果你的ASP.NETCoreMvc中存在大量的依赖,则在程序运行或修改时,就会存在大量的麻烦。会出现动一处而动全身,使程序越来越脆弱。因此,我们需要一种方法来解决这种依赖问题,使程序中的依赖性越少越好。依赖倒置就是用来解决程序中大量出现依赖的问题,具有5大原则:上层模块不应依赖于下层模块,而是共同依赖于第三方的一个抽象。类是抽象的,对象是具体的,具体要依赖于抽象,但是抽象绝对不能依赖于具体。对于上下层的理解很关键,上层就是使用者,如上例子中的C1,而下层就是被使用者,如上例子中的C2。实际上,C1是不应该依赖于C2的,因为C2类发生了变化之后,会直接传送到C1,这样C1也会发生变化,具有连锁反应。下面,我们根据依赖倒置原则,将上面的C1和C2进行修改,代码如下:IC2.cs文件的代码如下:namespaceYidosoft.Edu.CoreMvc.Test{publicinterfaceIC2{voidRun();}}这是一个接口,接口是抽象的,没有具体实现,只是定义一些规则。C2.cs文件代码如下:namespaceYidosoft.Edu.CoreMvc.Test{publicclassC2:IC2{publicvoidRun(){Console.Write(这是C2类。);}}}将C2继承于IC2,它们存在继承关系。这样IC2就抽象出来了。C1.cs文件的代码如下:namespaceYidosoft.Edu.CoreMvc.Test{publicclassC1{publicvoidGO(){IC2c2=newC2();c2.Run();}}}此时,在C1中,我们是使用了IC2类型的变量来接收C2的实例化对象。通过以上的代码修改完成之后,就符合依赖倒置的原则,让C1不再依赖于C2,而是依赖于IC2这个抽象接口。如果C2类发生了变化,是不会影响到C1类的,因为在C1中,我们使用到的是IC2接口中的方法,而不是C2中的方法。现在,我们将C1的代码放在Main()方法中:usingSystem;usingYidosoft.Edu.CoreMvc.Test;namespaceConsoleApp1{classProgram{staticvoidMain(string[]args){C1c1=newC1();c1.GO();Console.ReadKey();}}}在Program.cs类中,需要添加C1/C2/IC2所在的命名空间,然后在Main()方法中实例化C1类,并在对象中访问GO()方法。运行一下结果:此时,已经在C1中执行了IC2接口中的方法,并输出内容。在上面的例子中,我们详细讲解了什么是依赖,通过例子,我们理解依赖存在很大的问题,如果程序中存在很依赖,就会让我们天天在改程序,开发效果极低。而通过依赖倒置的原则,抽象出来一个接口,此时,让使用具体的对象的类依赖于抽象接口,就解决了依赖问题,这是对程序开发的一种设计原则。所以,各位开发者,在开发程序时,不要堆代码,也不要开始嫌麻烦,建立很多的接口和抽象类,目的就是为了后期更好的维护和程序的运行。且开发起来也不那么费劲,让测试者也发现不了问题,对一个程序员来说,没有问题的程序才是对自己最大的尊重。
1
查看完整版本: C开发者一定要避免程序中大量的依赖,而