Идиоматичный дизайн для отключения цвета в сценарии оболочки - PullRequest
1 голос
/ 27 января 2011

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

Пример

$ ./run_script
Some output.  <-- pretend this text is in blue

$ ./run_script --no-color
Some output   <-- no color

В настоящее время я начал программировать с цветным рубиновым гемомпоэтому я делаю что-то вроде этого:

puts "Some output".blue

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

Я предполагаю, что для решения этой проблемы будет шаблон делегирования , где я мог бы передать текст в виде хеша {:text => "Some output", :color => "blue"} классу Outputter, который просто маскирует либо ColorOutputterкласс или NoColorOutputter класс.Тем не менее, я не совсем уверен, поскольку создание трех новых классов для чего-то относительно тривиального кажется почти бесполезным.У кого-нибудь есть лучший подход к решению этой проблемы?

1 Ответ

1 голос
/ 27 января 2011

Я действительно переключился на свой класс выходного устройства. Под переключателем я подразумеваю что-то для вкл / выкл окраски выхода.

Создание группы унаследованных классов для одной небольшой задачи, на мой взгляд, хуже, чем наличие переключателя в вашем классе выходного устройства (и все плохие конструкции, которые вы получаете при использовании такого переключателя)

...