Что такое «клиент» в принципе разделения интерфейсов (ISP)?
Это одна из многих вещей, которые беспокоили меня некоторое время и из-за которых споры о правильной интерпретации этого привели меня в ряде проектов кодирования к тому, чтобы больше возиться с дизайном, чем с постоянным продвижением вперед. прогресс, потому что я хочу убедиться, что я понял это "правильно".
В этом случае у меня есть вопрос о «принципе разделения интерфейса» (ISP) из пяти «SOLID» принципов базового объектно-ориентированного проектирования. Его «каноническое» утверждение таково:
Клиентов не следует заставлять зависеть от методов, которые они не используют.
Однако вопрос здесь в том, что такое «клиент», потому что это приводит к очень разным интерпретациям, а также приводит к кажущейся дилемме при применении на практике, что я и хотел бы понять, если сначала это действительно так, и во-вторых, как лучше всего решить эту проблему.
Одна интерпретация этого заключается в том, что это «принцип единой ответственности» для интерфейсов, а не только для классов: т.е. если у вас есть интерфейс
Во-первых, если что-то используется в достаточном количестве мест, это особенно последнее - "вызывающий" - который обычно имеет тенденцию "кусаться", поскольку это естественным образом приводит к тому, что ваши интерфейсы распыляются только до отдельных методов. Например, рассмотрим простой интерфейс к внутреннему хранилищу или базе данных, который может иметь
И я не могу не чувствовать, что это почти похоже на анти-шаблон, особенно если это происходит с достаточным количеством объектов из-за того, что они используются в достаточно большом количестве мест. Это? Или я тут что-то не так понимаю? В конце концов, никто не создает общий класс-контейнер (например, «список», «карта» и т. д. во многих языках) с интерфейсами с одним методом, которые можно разделить на части для того, к чему он передается.