(Программирующий к интерфейсу v/s работающий с реальным классом), когда существует всего один реальный класс

>>> gen = (i for i in [])
>>> next(gen)
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    next(gen)
StopIteration

В конце генератора StopIteration повышен, с тех пор в Вашем конце случая сразу достигнут, исключение повышено. , Но обычно Вы не должны проверять на существование следующего значения.

другая вещь, которую можно сделать:

>>> gen = (i for i in [])
>>> if not list(gen):
    print('empty generator')
5
задан user170272 8 September 2009 в 16:24
поделиться

5 ответов

Насколько мне известно, существует три ситуации, в которых интерфейс оправдан:

  1. Это часть архитектуры (я признаю, что это не очень хорошо определено).
  2. У вас есть более 1.
  3. Это открытый интерфейс.

Не бойтесь использовать конкретные классы. Не создавайте механически интерфейс для каждого отдельного класса.

0
ответ дан 18 December 2019 в 07:10
поделиться

Создание интерфейсов для конкретных типов - это тонкий балансирующий процесс, поскольку вы можете легко создать взрыв интерфейса, который не дает никаких преимуществ и только усложняет доменное пространство избыточными типами.

Мое практическое правило - создавать интерфейсы только для типов, которые являются частью общедоступный API. Все типы, которые предназначены для реализации API и никогда не отображаются из API, не нуждаются в интерфейсе.

6
ответ дан 18 December 2019 в 07:10
поделиться

Одна из причин, по которой я продолжаю программировать интерфейс даже с одной реализацией, состоит в том, что это значительно упрощает написание моих тестов . Я могу настроить прокси для тестирования всего, что хочу проверить, и мне не нужно беспокоиться о тесной связи.

Это не всегда рекомендуется, но об этом стоит подумать, когда вы пытаетесь решить . Как вы думаете, вам нужно будет тщательно протестировать этот класс / объект? Если вы думаете, что будете, то работать с интерфейсом будет намного проще, чем с конкретным классом.

Альтернативой этому было бы не использовать интерфейс и создать подкласс конкретного класса, который тоже работает, но опять же зависит.

13
ответ дан 18 December 2019 в 07:10
поделиться

Интерфейсы следует развивать, а не создавать. Перед созданием интерфейса у вас должна быть особая потребность в интерфейсе. Если вам не нужно больше одной реализации, вам не нужен интерфейс. Всегда помните, YAGNI

3
ответ дан 18 December 2019 в 07:10
поделиться

В дополнение к уже данным хорошим ответам (простота тестирования и общедоступные API) я как использование интерфейсов, потому что так легче сосредоточиться на том, «что» должны делать ваши классы, чем на том, «как» они это делают.

0
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: