Одноэлементный пул объектов ColdFusion - PullRequest
3 голосов
/ 22 марта 2012

В нашем приложении ColdFusion у нас есть объекты модели без сохранения состояния. Все данные, которые я хочу получить, можно получить одним вызовом метода (он вызывает другие внутренне без сохранения состояния).

Методы обычно запрашивают данные в базе данных. Все методы доступны только для чтения, поэтому мне не нужно беспокоиться о безопасности потоков (исправьте меня, если я ошибаюсь).

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

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

Теперь меня беспокоит то, что все запросы на данные будут проходить только через один объект модели. Нужно ли мне? Я имею в виду, если на моем объекте у меня есть метод getOfferData (), и это отнимает много времени. Что если несколько клиентов захотят получить к нему доступ? Будет ли второй ждать завершения первого запроса или он выполняется в отдельном потоке? В конце концов, это один и тот же объект.

Должен ли я реализовать какой-то пул объектов для этого?

1 Ответ

6 голосов
/ 22 марта 2012

Шаблон синглтона, который вы используете, не вызовет проблему, которую вы описываете. Если getOfferData () все еще выполняется, когда другой вызов этой функции вызывается по другому запросу, это не приведет к его очереди в очереди, если вы не выполните одно из следующих действий: -

  1. Используйте cflock для предоставления эксклюзивной блокировки
  2. Получение очередей подключения к вашей базе данных из-за блокировки / транзакций
  3. У вас слишком много запущенных вещей, и вы используете все доступные параллельные потоки, доступные для ColdFusion

Так что, как вы идете, это хорошо.

Надеюсь, это поможет.

...