Singleton для конфигурации приложения

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

> prettyNum(12345.678,big.mark=",",scientific=FALSE)
[1] "12,345.68"
> format(12345.678,big.mark=",",scientific=FALSE)
[1] "12,345.68"

EDIT: Как говорит Майкл Чирико в комментарии:

Имейте в виду, что у них есть побочный эффект заполнения напечатанные строки с пробелом, например:

> prettyNum(c(123,1234),big.mark=",")
[1] "  123" "1,234"

Добавьте trim=TRUE в format или preserve.width="none" в prettyNum, чтобы предотвратить это:

> prettyNum(c(123,1234),big.mark=",", preserve.width="none")
[1] "123"   "1,234"
> format(c(123,1234),big.mark=",", trim=TRUE)
[1] "123"   "1,234"
28
задан madhu 17 December 2008 в 04:06
поделиться

4 ответа

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

РЕДАКТИРОВАНИЕ Мы живем и учимся. В то время как я думаю, что конфигурация приложения является одним из нескольких мест для использования Singleton, я больше не делаю этого. Как правило, теперь я создам интерфейс и реализацию стандартного класса, использующую статичный, Lazy<T> отступающие поля для свойств конфигурации. Это позволяет мне иметь, "инициализируют однажды" поведение для каждого свойства с лучшим дизайном для тестируемости.

22
ответ дан tvanfosson 14 October 2019 в 11:50
поделиться

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

6
ответ дан ColinD 14 October 2019 в 11:50
поделиться

Для той определенной ситуации я создал бы один объект конфигурации и раздал бы его тем, кому нужен он.

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

Однако, если Вы не имели проблем с помощью них и не хотите тестировать его, что трудно, необходимо продолжать идти, как Вы сделали до сих пор.

Read дискуссия о том, почему их считают вредными. Я думаю, что большинство проблем возникает, когда много ресурсов сохранено одиночным элементом.

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

1
ответ дан CharlesB 14 October 2019 в 11:50
поделиться

Шаблон "одиночка", кажется, способ пойти. Вот Setting класс , что я записал что работы хорошо для меня.

0
ответ дан Community 14 October 2019 в 11:50
поделиться
Другие вопросы по тегам:

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