首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将接口转换为子类型。这是坏SE吗?

将接口转换为子类型。这是坏SE吗?
EN

Software Engineering用户
提问于 2018-02-13 10:34:27
回答 1查看 102关注 0票数 4

在我工作的公司里,我一直看到IManager接口被转换成它们的真实类型,以及大量的"instanceof / TypeOf“if语句检查。

例如:

IManager管理器//作为参数传递给方法

代码语言:javascript
复制
if (manager.GetType() == typeof(CustomerManager)) {
    customerManager = (CustomerManager) manager;
    customers = customerManager.GetCustomers();
    groupId = customerManager.GetCustomerGroupID(); 
    // etc...
}

我一直在阅读Liskov替换原理,它指出“子类型必须是它们的基类型的可替换的”。这似乎违反了这一点。

子类型有它们自己非常具体的功能,我不知道如何解决这个问题。这是一个问题,我看到经常发生,当我自己正在发展。我发现很难避免,我认为我需要改变我对待接口的方式。

有没有人对避免这样的常见问题有什么建议?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2018-02-13 10:40:02

如果只使用接口中的函数将接口传递到无法完成其工作的地方,那么首先不应该使用这些接口。

通常这样的代码是人们盲目遵循“代码到接口,而不是实现”的结果,而不理解更重要的原则“如果使用instanceof,重构使用接口是没有意义的”。

如果多个具体类可用于某些特定目的,则接口非常有用。如果不是的话,那就没什么丢脸的了。也许您可以以不同的方式对您的功能进行分组,这样就可以将一些东西抽象掉。但是,在接口不工作的情况下强制使用接口是一个危险信号;这意味着某些人对重要原则的理解仅仅是半途而废。

票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/365846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档