Пользовательское заполнение клавишей Tab (compgen и полный удар builtins)
заполнение клавишей Tab хорошо, но способность применить его к больше, чем просто именам файлов является большой. Я использовал его для создания пользовательских функций для расширения аргументов командам, которые я использую все время. Например, позволяет, говорят, что часто необходимо добавлять FQDN как аргумент команде (например, ping blah.really.long.domain.name.foo.com
). Можно использовать compgen и завершиться для создания функции удара, которая читает/etc/hosts файл для результатов так все, что необходимо ввести, тогда:
ping blah.<tab>
и это отобразит все Ваши текущие опции соответствия.
Так в основном что-либо, что может возвратить список слов, может использоваться в качестве функции.
Я не провожу никаких линий - чем больше, тем лучше.
Что происходит, так это то, что чем больше вам удастся разделить свой API на небольшие единицы, тем ближе вы к Принцип единой ответственности , потому что все, что скрывается за интерфейсом, будет иметь тенденцию делать только одно, и делать это хорошо.
Путем внедрения интерфейсов в реализацию, реализующих новые интерфейсы, которые внедряются в другие типы и т. д. вы получаете очень гибкую структуру, в которой вы можете изменять детали реализации практически на любом уровне, и каждый участник совместной работы довольно прост сам по себе.
При хорошем контейнере DI и некоторых разумных соглашениях контейнер DI автоматически позаботьтесь о большей части проводки, поэтому конфигурация не должна быть экстремальной.
Классы, которые должны быть созданы контейнером DI (при условии, что он используется), должны быть теми, которые реализуют разделенный интерфейс , и которые необходимо выбирать во время выполнения в зависимости от среда исполнения.
Затем вы можете спросить: какие классы должны реализовывать разделенный интерфейс , а какие нет? В основном есть две причины для создания нового отдельного интерфейса:
Для справки см: http://martinfowler.com/articles/injection.html#SeparatingConfigurationFromUse