Что должно быть создано через контейнер МОК?

Пользовательское заполнение клавишей Tab (compgen и полный удар builtins)

заполнение клавишей Tab хорошо, но способность применить его к больше, чем просто именам файлов является большой. Я использовал его для создания пользовательских функций для расширения аргументов командам, которые я использую все время. Например, позволяет, говорят, что часто необходимо добавлять FQDN как аргумент команде (например, ping blah.really.long.domain.name.foo.com). Можно использовать compgen и завершиться для создания функции удара, которая читает/etc/hosts файл для результатов так все, что необходимо ввести, тогда:

ping blah.<tab>

и это отобразит все Ваши текущие опции соответствия.

Так в основном что-либо, что может возвратить список слов, может использоваться в качестве функции.

6
задан alexandrul 18 May 2010 в 06:00
поделиться

2 ответа

Я не провожу никаких линий - чем больше, тем лучше.

Что происходит, так это то, что чем больше вам удастся разделить свой API на небольшие единицы, тем ближе вы к Принцип единой ответственности , потому что все, что скрывается за интерфейсом, будет иметь тенденцию делать только одно, и делать это хорошо.

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

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

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

Классы, которые должны быть созданы контейнером DI (при условии, что он используется), должны быть теми, которые реализуют разделенный интерфейс , и которые необходимо выбирать во время выполнения в зависимости от среда исполнения.

Затем вы можете спросить: какие классы должны реализовывать разделенный интерфейс , а какие нет? В основном есть две причины для создания нового отдельного интерфейса:

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

Для справки см: http://martinfowler.com/articles/injection.html#SeparatingConfigurationFromUse

1
ответ дан 17 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

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