版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36445227/article/details/81490638
前46页感觉都没什么用,
实体类效验没有卵用,日常用不到
Razor 辅助器 ,用的比较少
建立松耦合组件
我在这里就用自己的话来写一下我学到的东西:
首先有三个个体 : 接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ASPNETMVC5.Interface
{
public interface IEmailSender
{
string Send();
}
}
,接口的实现类 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ASPNETMVC5.Interface
{
public class MyEmailSender : IEmailSender
{
public string Send()
{
return "发送中";
}
}
}
想要使用该接口中方法的类
首先接口可以被多个子类继承,同时接口本身也期待被继承(被继承后重写方法才能完成实际的任务)
所以接口被实现是不可或缺的一步
如上代码接口已经实现,现在就等着外界调用了,按照常规思想,我们会实例化 接口的实现类再调用其中的方法
namespace ASPNETMVC5.Interface
{
public class PasswordResetHelper
{
IEmailSender sender = new MyEmailSender();
public void ResetPassword()
{
sender.Send();
}
}
}
这导致了该类与 接口 和接口实现类都产生了关系 ,如果某一天我们用其他的 接口实现类来替代原先的类(MyEmailSender)
导致我们不得不在(PasswordResetHelper ) 中修改代码 IEmailSender sender = new MyEmailSender();改为其他
如果项目足够大你需要花费好几个步骤才能找到它 ,并修改.而且无法预知在什么地方有什么其他运用,拓展性极差
依赖项注入:
本例子最后就是为了引出这个好用的方法
public class PasswordResetHelper
{
IEmailSender sender;
public PasswordResetHelper(IEmailSender senderArgs)
{
sender = senderArgs;
}
public void ResetPassword()
{
sender.Send();
}
}
构造函数需要传入一个 接口类型 : 用于接收 接口的实现类
类中有一个接口类型的变量 : 用于接收 接口的实现类
这种结构称之为 : 将 PasswordResetHelper 类 的构造函数 对 IEmailSender 接口 声明 了一个依赖项
解释:除非接收一个实现了接口的对象,否者不能使用和创建它 ,这里的 PasswordResetHelper 类 已经和 MyEmailSender
没有依赖关系 ,仅仅和 接口是依赖关系
记得在 支付宝的SDK中见到过类似的机构,当时还没有学到这一招,既然阿里的工程师都在用说明就是好东西