У меня есть система бронирования, которая позволяет вам забронировать бронирование, изменить существующее бронирование и отменить существующее бронирование. Я изучал принцип разделения интерфейсов, и мне было интересно, насколько тонкими должны быть мои интерфейсы и нарушаю ли я принцип единой ответственности. Мой первоначальный дизайн был:
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). Как вы определяете, что должно входить в интерфейс, а что должно быть разделено на другой интерфейс, класс и т. Д ...