C# 什么';包装通用接口的目的是什么?
我在一个项目中看到了许多接口,它们只是包装了一个泛型类 例如:C# 什么';包装通用接口的目的是什么?,c#,generics,interface,C#,Generics,Interface,我在一个项目中看到了许多接口,它们只是包装了一个泛型类 例如: public interface IAssertionViewModelMapper : IMapper<Assertion, AssertionViewModel> {} public interface ISearchPageViewModelMapper : IMapper<IList<Tag>, SearchPageViewModel> {} 公共接口IAssertionViewMod
public interface IAssertionViewModelMapper : IMapper<Assertion, AssertionViewModel>
{}
public interface ISearchPageViewModelMapper : IMapper<IList<Tag>, SearchPageViewModel>
{}
公共接口IAssertionViewModelMapper:IMapper
{}
公共接口ISearchPageViewModelMapper:IMapper
{}
有人能解释一下他们为什么这么做吗?我的意思是我可以直接实现IMapper接口 有时候,团队决定不希望依赖那些可能会发生更改并被弃用的内置实现。所以他们包装了所有的东西,类,接口,类型,并在他们的项目中使用它们。他们希望有一天,当对某些框架组件的支持被放弃时,他们可以简单地修改包装器,而不需要重写整个软件
我工作的地方也是这样。当然,所有东西都是十年前包装好的,我们只使用定制包装。正如你可能猜到的那样,时间已经证明,大部分时间是不需要的。当某些东西被弃用时,没有真正节省时间。我们仍然需要修改一些花了很多时间的代码,但是包装器在任何方面都没有帮助。相反,包装器是经常遇到的障碍,因为它们当时没有完全包装东西,所以我们必须时不时地扩展包装器。这样做会创建一种新的接口类型。因此,如果您声明引用:
IAssertionViewModelMapper avmm = null;
如果对象实现IMapper
,则无法将对象指定给该对象。它们是不同的类型,并且只在一个方向上具有分配兼容性:派生的可以分配给基
因此,如果有人为了简化代码而尝试这种技巧,比如在C中使用typedef,那么他们将来可能会积累一些混乱。Microsoft代码分析(又称FxCop)包含一条禁止这样做的规则。但是,创建这样的新接口有几个优点:
IMapper
派生的大多数接口实际定义新方法时,它可以使代码库更加一致。很容易发现接口,即使它们没有定义新成员