All streams
Search
Write a publication
Pull to refresh
-4
@AccessGrantedread⁠-⁠only

User

Send message
Если я не ошибаюсь в спецификации протокола TCP минимальное значение UTO равно одной секунде. Так что тут еще под вопросом как это было реализовано в PeclMemcache.
Не переживайте по поводу отдельных комментариев — с отдельными товарищами и их подходу к проектированию я уже успел столкнуться в комментариях к другой статье.

А в общем идея Ваша мне понравилась — что-то полезное для себя извлек.

Вот только меня смущает этот момент:
SequentialCache — представьте, что у вас есть хранилище, которое иногда падает или просто недоступно. Например, оно может иногда выводиться на обслуживание, перезапускаться и т.д. При этом, данные приложение хочет получать всегда. Для покрытия этой ситуации можно использовать SequentialCache, примерно с таким конфигом:

Вы представляете сколько будет ожидать приложение подключения к упавшему серверу кеширования прежде чем отвалится по timeout-у? Это только увеличит время получения данных а не уменьшит его.
Судя по Вашему тону прет Вас. Я лишь выступаю за документированный и продуманный код а не синглетоны написанные за 10 минут.

Так что расслабтесь. А с глобальными переменными (собственно она там одна) Вы меня в очередной посмешили.
Я считаю крупным везением работать с хорошо документированным и продуманным кодом. Лично Вы можете дальше продолжать использовать свой синглетон в четыре строчки кода — никто же не запрещает).
Вы, простите, еще раз что хотите то сказать? Объект класса реализующий интерфейс взаимодействия с БД порожденный синглетоном ничем не отличается от такого же объекта порожденного фабрикой.

Да, для юнит тестов нужно нивелировать ряд факторов, которые могут возникать в реальном окружении а не в тестовом. Это всем известно — какое отношение это все имеет к реализации паттерна, этого я не могу понять.
Вам очень крупно повезет, если Вам придеться читать мой код, а не код программиста реализующий паттерн синглетон за 2 минуты в десять строк кода.
Опять не понимаю о чем Вы. Конкретный пример из статьи: у меня есть класс синглетон Db. В конкретном юнит тесте мне не нужно:

a) Что бы не происходило соединение с реальной базой данных.

б) Подставлять нужный мне результат метода ::select.

Все это осуществляется. Какие состояния еще нужно мне знать не пойму.
Не понятно что имеется в виду под 'хранит состояние системы'. Создовать God object с его помощью никто не намеревается. Возможность влиять на механизм создания объекта типа синглетон (а значит и его состояния) у нас тоже есть.

По-прежнему не вижу никаких проблем.
Термин Multiton был введен чтобы не рвать отдельным людям шаблон; проходите мимо.
Годами ранее возможности языка не позволяли делать нормальную реализацию. Юнит тесты не ставят под сомнения синглетоны. Проблема создания mock объектов, использующий паттерн синглетон, теоретически решена — нужно только сделать.
Теперь это называется по хитрому: Мультитон 8)
Мультитоны это те же яйца только сбоку. Неужели Вы не видите очевидного? В реализации паттерна, который здесь обсуждается, тоже есть такое решение быть ли классу так называемому мультитону или не быть. Внимательней нужно быть.

$connection1 = Object::get( 'DatabaseConnection', '127.0.0.1', 'mrbuzzk', 'abcdefgh' );
$connection2 = Object::get( 'DatabaseConnection', '127.0.0.1', 'mrbuzzk', 'abcdefgh', 3306 );
$connection3 = Object::get( 'DatabaseConnection', '192.168.120.1', 'mrbuzzk', 'abcdefgh', 3306 );
Основные особенности паттерна я отметил в самом начале статьи. Где это можно применить — каждый пусть решает сам.
Смотря с какой точки зрения на это смотреть. Я сторонник слабо-связанной архитектуры. В таком случае наш класс Db сам по себе и не зависит ни от кого в создании и конфигурации.

В крайнем случае можно использовать MessageBus как связующий компонент для конфигурации отдельных компонентов.

И если у меня появятся две новые базы я просто изменю базовый класс.
Спасибо что просветили. Все переменные в глобальном пространстве имен имели префикс 'singleton', что сводило к минимуму вероятность коллизии имен.
Первоочередной принцип программирования: не засорять пространство видимости имен в том числе и глобальное. В данном случае этот принцип соблюдается. Запись в глобасы… Вы уж простите, даже формулируется не академически.
В общем никто не запрещает использовать его как обычный синглетон. В моей практике был такой случай, когда разработчикам понадобился еще один интерфейс подключения к ведомой СУБД. Решение потрясало своей простотой и «изящностью»: был создан класс DB2 — копия DB только с необходимыми настройками,

Это не академический подход, как некоторые тут говорят, но зато в реальном проекте.
12 ...
16

Information

Rating
Does not participate
Registered
Activity