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接口中的办法,并输出内容。
在上面的比如中,咱们具体讲解了什么是依靠,经过比如,咱们了解依靠存在很大的问题,假如程序中存在很依靠,就会让咱们天天在改程序,开发效果极低。而经过依靠倒置的准则,笼统出来一个接口,此刻,让使用具体的目标的类依靠于笼统接口,就处理了依靠问题,这是对程序开发的一种规划准则。
所以,各位开发者,在开发程序时,不要堆代码,也不要开端嫌费事,建立许多的接口和笼统类,目的便是为了后期更好的维护和程序的运转。
且开发起来也不那么费力,让测试者也发现不了问题,对一个程序员来说,没有问题的程序才是对自己最大的尊重。