我们假设我们有一个名为IAccountRepo的接口和一个实现此接口的类,该接口名为AccountDbRepo,用于调用SQL。
现在我们必须用AccountWebApiRepo替换这个具体的类(AccountDbRepo),这意味着这个类将在webapi中进行操作。
IAccountRepo的命名是否正确,知道混凝土类进行web api调用?我们应该将Repo重命名为Service吗?
修改 现在,如果你必须创建第二个接口ICarRepo,你知道实现将是对webapi的调用。将它命名为Repo是否正确?
答案 0 :(得分:8)
对接口进行编程的全部意义在于,您应该能够在不改变系统正确性的情况下将一个实现替换为另一个实现。这也称为Liskov Substitution Principle。
因此,如果您要根据具体实现重命名接口,那么它将是 Leaky Abstraction 。
因此,您不应该因为这个原因重命名接口。正如Robert C. Martin在Agile Principles, Patterns, and Practices中解释的那样,“客户[...]拥有抽象接口”(第11章)。因此,您应该根据客户端如何感知它来命名界面,而不是如何实现它。