我非常清楚这样一个问题可能已经发布了。然而,由于 IoC 在这种情况下的参与以及大量代码,我在一家我刚入职的公司中看到一位同事提出了这个问题。
设想:
在一个产品的代码库中,这位同事构建的每个接口都是明确实现的。整个应用程序是通过结构映射构建的,但在某些地方使用和转换的具体类型是这样的
((IInterface)concreteClass).SomeMethod()
背景:
那位同事在询问显式实现所有接口是什么后向我解释说,他们最近引入了 StructureMap,许多人仍然会使用具体类型。因此,从本质上讲,它是一种“教育”公司人员的手段。
我对此事的看法:
首先,切换到 StructureMap 已经在几年前完成了,虽然这在某种程度上迫使更多地使用接口,但在我看来这不是正确的方法。在我看来,了解具体类型的人可以看到实现,并且很容易看到我上面展示的内容......只需投射它。清晰的通信或编码约定会使这变得更好。如果使用 IoC 而没有具体的类,那么显式实现接口是完全没用的。
我也听说这真的会弄乱继承,但不知道一个例子。我还看到Jon Skeet有点不喜欢以上述方式使用它,而是使用它打算使用的方式,比如 IEnumerable<> 和其他名称冲突。
任何人都可以为我阐明这件事。优点和缺点(尽管我非常倾向于不这样做,因此我在这里发帖),尤其是其中一个或另一个的原因。
谢谢!
编辑:我很清楚这不是对与错的问题,也没有真正的答案。这更像是一个学习了解每种方法的缺陷的问题。为什么我会在一种情况下使用一种而不是另一种方法?