在我工作的公司里,我一直看到IManager接口被转换成它们的真实类型,以及大量的"instanceof / TypeOf“if语句检查。
例如:
IManager管理器//作为参数传递给方法
if (manager.GetType() == typeof(CustomerManager)) {
customerManager = (CustomerManager) manager;
customers = customerManager.GetCustomers();
groupId = customerManager.GetCustomerGroupID();
// etc...
}我一直在阅读Liskov替换原理,它指出“子类型必须是它们的基类型的可替换的”。这似乎违反了这一点。
子类型有它们自己非常具体的功能,我不知道如何解决这个问题。这是一个问题,我看到经常发生,当我自己正在发展。我发现很难避免,我认为我需要改变我对待接口的方式。
有没有人对避免这样的常见问题有什么建议?
发布于 2018-02-13 10:40:02
如果只使用接口中的函数将接口传递到无法完成其工作的地方,那么首先不应该使用这些接口。
通常这样的代码是人们盲目遵循“代码到接口,而不是实现”的结果,而不理解更重要的原则“如果使用instanceof,重构使用接口是没有意义的”。
如果多个具体类可用于某些特定目的,则接口非常有用。如果不是的话,那就没什么丢脸的了。也许您可以以不同的方式对您的功能进行分组,这样就可以将一些东西抽象掉。但是,在接口不工作的情况下强制使用接口是一个危险信号;这意味着某些人对重要原则的理解仅仅是半途而废。
https://softwareengineering.stackexchange.com/questions/365846
复制相似问题