瘦和胖接口之间的"细线"是什么?

Xai*_*oft 4 .net oop interface solid-principles

我有一个预订系统,允许您预订,修改现有预订和取消现有预订.我正在研究接口隔离原理,我想知道我应该如何轻松地创建我的接口,如果我违反了单一责任原则.我的初始设计是:

interface IReservation
{
     void Book();
     void Modify();
     void Cancel(); 
}
Run Code Online (Sandbox Code Playgroud)

但后来我想,如果一个预约系统,不需要为预约实现这些方法之一,并且只关注预订,那么我做了以下事情:

interface IBook
{
     void Book();
}


interface IModify
{
    void Modify();
}

interface ICancel
{
    void Cancel();
}
Run Code Online (Sandbox Code Playgroud)

现在我可以这样做:

interface IReservation : IBooking
{


}
Run Code Online (Sandbox Code Playgroud)

要么

interface IReservation : IBooking, IModify
{


}
Run Code Online (Sandbox Code Playgroud)

所以问题就变成了我把它变得如此稀疏.此外,更难以考虑接口的名称,例如,我不喜欢IModify或ICancel(它们看起来像我应该在IReservation接口上的方法).你如何确定接口应该进入什么以及应该将哪些内容转移到另一个接口,类等等......

Ada*_*son 5

在查看接口范围时,您需要考虑两件事:

  1. 要求每个人IReservation都实施这些成员是否有意义?
  2. X没有会员参考会员是否有意义Y

第一个是你所涵盖的内容,并得出了"否"的结论.第二,虽然同样重要.在没有能够做任何其他事情的情况下,将某些事物视为"可以修改"是否有意义?如果没有,请考虑制作IReservationIModifiableReservation/或其他一些功能组合.

例如,它似乎CancelModify手拉手,所以可能想把它们放在一起IModifiableReservation,然后让你的类实现该接口.

就像你拥有它一样,这似乎有点过于细化.