我试图养成编码到接口而不是实现的习惯,而在大多数情况下,我可以看到有一些我努力的原因.
拿这个非常简单的例子:
public interface IAuditLog
{
void AddLog(string log);
}
public class AuditLog : IAuditLog
{
public void AddLog(string log)
{
//implementation
}
}
Run Code Online (Sandbox Code Playgroud)
要调用审计日志类:
public partial class AuditLogPage : System.Web.UI.Page
{
protected void btnAddLog_Click(object sender, EventArgs e)
{
IAuditLog objAuditLog = new AuditLog();
objAuditLog.AddLog("test log");
}
}
Run Code Online (Sandbox Code Playgroud)
在实例化时我仍然需要使用AuditLog,那么重点是什么?如果AddLog方法签名发生变化,我仍然需要浏览所有使用它的页面并修改代码.我错过了这一点吗?
感谢任何提前帮助,威尔基.
在示例中,如果您FileAuditLogger()使用DatabaseAuditLogger()或者EventLogAuditLogger()可以切换实现而无需重写代码.
通常,您使用IoC容器(Autofac,StructureMap,Unity等)自动连接对象实例.所以不要打电话给new AuditLog()你打电话IoC.Container.Resolve<IAuditLog>()
如果您想了解更多信息,请与我们联系.