大佬教程收集整理的这篇文章主要介绍了Asp.net mvc 知多少(十),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Q91. 什么是松耦合以及如何实现松耦合? Ans. MVC设计模式最重要的功能之一就是关注点分离。 因此,@R_919_9616@程序的模块应该尽可能的保持独立,也就是保持松耦合。它促使更容易的对应用程序进行测试和维护。 通过使用Dependency Injection (DI,依赖注入)可以帮忙我们实现应用程序各个模块之间的松耦合。
Q92. 什么是Dependency Inversion Principle (DIP,依赖倒置原则)和IoC(控制反转)? Ans. 依赖倒置原则讲的是:
s.jianshu.io/upload_images/2799767-b57cba4efbc3d4b7.png?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1240">
举例来说,假设你客户端的类需要使用一个service类组件,那么最佳实践是让你的客户端类知道有个Iservice接口而不是service类,这种方式下,你可以随时改变Iservice的具体实现而不会中断已经部署的代码。IoC and DIP DIP是指高层模块不应该依赖低层模块而都应该依赖于抽象。 IOC是用来提供抽象,改变控制。IOC提供了一些方式来实现DIP。如果想让高层模块独立于低层模块,你需要反转控制才能使低层模块不去控制接口并创建对象。 最终IOC提供了控制反转的一些方式。
s.jianshu.io/upload_images/2799767-05eaa37e8fd23780.png?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1240">
Q93. 什么是Dependency Injection (DI,依赖注入)? Ans. DI 是一种软件设计模式,用来允许我们开发松耦合代码。DI是一种很好的方式去减少软件模块之间的紧耦合关心。DI帮助更好的去管理软件中的功能更新和复杂度。DI的目的是让代码可维护。 依赖注入模式使用构造器对对象初始化并提供需要的依赖给对象,也就意味着允许你从类外部注入一个依赖项。
例如,假设你的客户端类需要使用一个服务类组件,那么你能做的就是让你的客户知道一类Iservice接口而不是服务类。这样,你就可以随时改变service类的实现而不会中断已经部署的代码。
s.jianshu.io/upload_images/2799767-aa2afcee343e8246.png?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1240">
Q94. 什么是service Locator(服务定位器)? Ans. service Locator 是一种软件设计模式,使得我们可以开发松耦合的代码。 它实现了DIP准则,它很容易与现有代码一起使用使,因为它可以使整体设计变得宽松而不需要强制更改公共的接口。 service Locator模式引入了一个locator(定位器)的对象,该对象用来解决依赖,意味着通过在类中引用该定位器对象就可以解决类的依赖项。
s.jianshu.io/upload_images/2799767-d00a1afdf42c6775.png?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1240" alt="SL图解">
来看一个具体的实例:
public interface Iservice {
void Serve();
}
public class service: Iservice {
public void Serve() {
Console.WriteLine("service Called");
//To Do: Some stuff
}
}
public static class Locateservice {
public static Iservice _service {
get;
set;
}
public static Iservice Getservice() {
if (_service == null) _service = new service();
return _service;
}
}
public class Client {
private Iservice _service;
public Client() {
this._service = Locateservice.Getservice();
}
public void Start() {
Console.WriteLine("service Started");
this._service.Serve();
//To Do: Some stuff
}
}
class Program {
static void Main(String[] args) {
var client = new Client();
client.Start();
Console.ReadKey();
}
}
Q95. 有哪几种方式实现依赖注入? Ans. 主要有以下三种方式: ** Constructor Injection (构造函数注入)** 这是最常用的注入方式。当实例化类的时候通过给类的构造函数提供依赖项来实现依赖注入。注入的依赖可以在类的任何地方直接使用。适用于类需要一个或多个依赖时。
public interface Iservice {
void Serve();
}
public class service: Iservice {
public void Serve() {
Console.WriteLine("service Called");
}
}
public class Client {
private Iservice _service;
public Client(Iservice servicE) {
this._service = service;
}
public void Start() {
Console.WriteLine("service Started");
this._service.Serve();
//To Do: Some stuff
}
}
//Builder
class Program {
static void Main(String[] args) {
Client client = new Client(new service());
client.Start();
Console.ReadKey();
}
}
Property Injection(属性注入) 适用于类需要可选的依赖时,或者需要可交换的实现时,比如Log4Net。 在使用时需要Null check。 这种方式不需要增加或修改构造函数。
public class Client {
private Iservice _service;
public Iservice service {
set {
this._service = value;
}
}
public void Start() {
Console.WriteLine("service Started");
this._service.Serve();
//To Do: Some stuff
}
}
//Builder
class Program {
static void Main(String[] args) {
Client client = new Client();
client.service = new service();
client.Start();
Console.ReadKey();
}
}
@H_231_1@method Injection(方法注入) 这种方式注入依赖到单一的方法,改依赖仅仅被注入的方法使用。 适用于整个类不需要依赖项,而仅仅某个方法需要。
public class Client {
private Iservice _service;
public void Start(Iservice servicE) {
this._service = service;
Console.WriteLine("service Started");
this._service.Serve();
//To Do: Some stuff
}
}
//Builder
class Program {
static void Main(String[] args) {
Client client = new Client();
client.Start(new service());
Console.ReadKey();
}
}
Q96. 依赖注入的好处是什么? Ans. 主要有以下好处:
Q97. 什么是IOC或DI容器? Ans. IOC和DI描述的是同一个设计模式,通常可以交互使用。 因此有人说IOC容器,有人说DI容器,其实它们都指的是同一个东西,所以不要被术语迷惑。 一个DI容器是一个机制用来创建依赖并当需要依赖的时候自动注入。当需要依赖时它自动基于请求创建对象并注入。DI容器用一种简单容易的方式帮助我们管理应用程序的依赖。 我们也可以不使用DI容器来管理依赖,但是这样我们需要做更多的工作来让其支持可配置和可管理。
Q98. 有哪些流行的DI容器? Ans. 现在,有很多不错的DI容器适用于.net。 列举如下:Castle Windsor
Spring.NET
Autofac
Unity
Ninject
Q99.什么是Test Driven Development (TDD,测试驱动开发)? Ans. TDD是一个开发原则,在写代码之前先写测试。 测试驱动应用程序的设计和开发周期。 在所有的测试通过之前,不能签入代码。s.jianshu.io/upload_images/2799767-ef3b709a9ceb6059.png?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1240" alt="TDD开发流程">
Q100. ASP.NET MVC中有哪些常用的单元测试工具? Ans. ASP.NET MVC被设计为可测试的,而不需要依赖IIS、数据库或额外的类。 以下是比较流行的测试工具: • NUnit - NUnit是 Microsoft .NET上比较流行的单元测试框架。它的语法相对简单易用。它提供了跑单元测试的GUI和命令行工具。NUnit提供有NuGet包供下载使用。 • xUnit.NET - xUnit.NET提供了一种自动化运行单元测试的方式。它简单、易于扩展、语法清晰。 • Ninject 2 - Ninject提供连接应用程序中类的方式。 • Moq - Moq提供了一种在测试期间模拟类和接口的机制。
以上是大佬教程为你收集整理的Asp.net mvc 知多少(十)全部内容,希望文章能够帮你解决Asp.net mvc 知多少(十)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。