我希望在更新类中的接口时,能够尽可能地减少代码更改的次数。
我知道可以“只需创建一个新接口”来提供新功能,但这样一来,我就必须更新代码中所有旧接口的引用以使用新接口。
我想知道这是否比创建一个新接口并更新所有引用更好。
假设我从这里开始:
public interface iMyWaiter : iMyWorker
{
void takeOrder();
}
当然,我的类看起来像这样,由于它们与手头的主题无关,我不会展示类中的所有方法和属性。
public class MyWaiter : MyWorker, iMyWaiter
{
}
现在假设我想要将iMyWaiter更新到版本2,通常的方法是创建一个新的接口:
public interface iMyWaiter2 : iMyWaiter
{
void getBill();
}
并从新接口派生出类:
public class MyWaiter : MyWorker, iMyWaiter2
{
}
这将导致搜索 iMyWaiter 的引用并将其替换为 iMyWaiter2 的成本。
iMyWaiter waiter = new MyWaiter();
waiter.takeOrder();
现在变成:
iMyWaiter2 waiter = new MyWaiter();
waiter.takeOrder();
我正在考虑制作一个通用的“iWaiter”接口,它派生自版本化的接口,并且有一个从版本化接口派生的通用类:
public interface iMyWaiter_1 : iMyWorker
{
void takeOrder();
}
public class MyWaiter_1 : MyWorker, iMyWaiter_1
{
}
public interface iWaiter : iMyWaiter_1
{
}
public class MyWaiter : MyWaiter_1, iMyWaiter
{
}
现在,当我需要更新我的界面时,我只需在通用界面和上一个版本之间插入新界面即可:
public interface iMyWaiter_1 : iMyWorker
{
void takeOrder();
}
public class MyWaiter_1 : MyWorker, iMyWaiter_1
{
}
public interface iMyWaiter_2 : iMyWaiter_1
{
void getBill();
}
public class MyWaiter_2 : MyWaiter_1, iMyWaiter_2
{
}
基本上这个接口和类总是可以创建,我的代码不会改变,除非使用新接口中公开的新功能。
public interface iWaiter : iMyWaiter_2
{
}
public class MyWaiter : MyWaiter_2, iMyWaiter
{
}
现在,我只需将“getBill”函数添加到我的代码中,不必担心接口问题。
iMyWaiter waiter = new MyWaiter();
waiter.takeOrder();
waiter.getBill();
我的问题:
这是一个好的设计实践吗?
有哪些缺点?
我没有考虑什么?