В Ruby, как реализовать глобальное поведение? - PullRequest
0 голосов
/ 07 мая 2010

Я хочу реализовать концепцию рабочего пространства. Это глобальная концепция - весь другой код будет взаимодействовать с одним экземпляром этого рабочего пространства. Рабочая область будет отвечать за поддержание текущего состояния системы (т. Е. Взаимодействие с моделью системы, сохранение состояния системы и т. Д.)

Так что, какова лучшая стратегия проектирования для моего рабочего пространства, учитывая, что это должно быть проверяемым (сейчас используется RSpec, но с удовольствием посмотрим на альтернативы).

Прочитав несколько проектов с открытым исходным кодом, я увидел 3 стратегии. Ничего из этого я не могу назвать «лучшей практикой».

Это:

  1. Включите класс singleton. Но насколько это проверяемый? Изменится ли глобальное состояние рабочего пространства между тестами?
  2. Реализовано все поведение как методы класса. Опять же, как вы это тестируете?
  3. Реализовано все поведение как методы модуля. Не совсем уверен в этом!

Что лучше? Или есть другой способ?

Спасибо, Гордон

Редактировать

Когда я начал включать модуль 'singleton' во весь мой код, я понял, насколько тесно я создал свой код со ссылками на эти глобальные экземпляры повсюду.

Итак, я начал полностью их удалять и вместо этого передаю ссылки на глобальные экземпляры. Но теперь я иду по маршруту МОК - прохожу зависимости через мои конструкторы.

Это хорошая идея в Ruby? Или я что-то упустил?

Кстати, вы, наверное, поняли, что я новичок в Ruby!

Ответы [ 2 ]

0 голосов
/ 07 мая 2010

Может быть, Singleton модуль из стандартной библиотеки будет полезен?Если вы включите этот модуль в свой класс, может быть создан только один его экземпляр.Затем вы можете использовать переменные экземпляра для управления состоянием вашего рабочего пространства и т. Д.

Если это было то, что вы имели в виду под «Включить класс синглтона», то извините, но термин «синглтон» встречаетсясовсем немного на земле Ruby, обычно в этом контексте .

0 голосов
/ 07 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...