Когда следует использовать одноэлементные шаблоны и статические методы?

0

Когда следует использовать одноэлементный шаблон и статические (статические методы и статические свойства)?

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

Но опять же, существует много фреймовых фреймворков, использующих одиночные игры, такие как Laravel, который становится все более популярным в наши дни.

Например, в Laravel,

$app->singleton(
    'Illuminate\Contracts\Http\Kernel',
    'App\Http\Kernel'
);

$app->singleton(
    'Illuminate\Contracts\Console\Kernel',
    'App\Console\Kernel'
);

$app->singleton(
    'Illuminate\Contracts\Debug\ExceptionHandler',
    'App\Exceptions\Handler'
);

Если вы проверите это, вы можете использовать синглтон в Laravel (кажется). Так, что происходит?

Синглтон - первая буква в STUPID, которую мы должны избегать, насколько это понятно.

Но я считаю, что некоторые программисты категорически не согласятся - Its the best way to do it in that situation - if you need to use them, use them. Simple as that. Its the best way to do it in that situation - if you need to use them, use them. Simple as that.

Итак, в каких ситуациях вам следует использовать одиночные игры, если вы не согласны с STUPID?

Кроме того, в Laravel вы видите много таких,

$users = DB::table('users')->get();

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

Это кажется простым в использовании, но как насчет тестирования, сложно ли их тестировать?

Я вижу этот метод (DB::something(...)) много в других рамках. Они кажутся не очень хорошей идеей, но многие тоже не согласятся. Итак, в каких ситуациях вам следует использовать статические методы?

Теги:
design-patterns
singleton
static-methods

1 ответ

1

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

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

Способ, которым laravel использует статические методы, такие как DB::table состоит в том, что он будет просто оболочкой вокруг синглтона или, как им нравится называть его, инвертией контейнера управления (http://laravel.com/docs/4.2/ioc). Цель состоит в том, чтобы позволить вам иметь статический интерфейс, для которого вы можете изменить внешний провайдер singleton, если вам нужно использовать другой ресурс.

Чтобы ответить на последнюю часть, наилучшей целью статического метода было бы либо выполнить некоторые вычисления по статическим, либо постоянным свойствам класса, которым не нужен экземпляр для существования (рассмотрим Java: когда использовать статические методы).

  • 0
    Спасибо за ответ, Брайан. when you need to configure a resource that is costly to build. так что дорого строить? соединение с БД - так же, как Laravel?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню