【发布时间】:2011-12-12 21:37:06
【问题描述】:
我有一个预订系统,可让您预订、修改现有预订和取消现有预订。我正在研究接口隔离原则,我想知道我应该使我的接口有多薄,以及我是否违反了单一责任原则。我最初的设计是:
interface IReservation
{
void Book();
void Modify();
void Cancel();
}
但后来我想,如果一个预订系统不需要为预订实现这些方法之一并且只关注预订,例如,我做了以下操作:
interface IBook
{
void Book();
}
interface IModify
{
void Modify();
}
interface ICancel
{
void Cancel();
}
现在我可以这样做了:
interface IReservation : IBooking
{
}
或
interface IReservation : IBooking, IModify
{
}
所以问题就变成了我是否将它像这样细化了。此外,为接口考虑名称变得更加困难,例如,我不喜欢 IModify 或 ICancel (它们对我来说就像应该在 IReservation 接口上的方法)。你如何确定什么应该进入一个接口,什么应该被隔离到另一个接口、类等等......
【问题讨论】:
-
很难判断你是否会走得更远。如果你从字面上看这个例子 - 是的。 IMO 在这种情况下(小)由 YAGNI 原则决定,但如果它变得更大,那么其他因素变得更加重要。
-
不想用我有限的回答破坏你的问题,但我可以对这两种方法说些什么。第一个是最直观的,每个人都会从它开始。第二个更像是框架级接口,如 IEnumerable 等。这是一次性工作还是尝试创建框架?
标签: .net oop interface solid-principles