1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Почему static singleton - плохо? И какие есть пути решения

Тема в разделе "Разработка плагинов для новичков", создана пользователем neverlessy, 13 ноя 2022.

Метки:
  1. Автор темы
    neverlessy

    neverlessy Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    neverlessy
    Вопрос в шапке. Все таки интересно какие есть еще удобные варианты получения экземпляра плагина.

    Слышал про dependency injection и даже работал, но как по мне занимает много места. Мне говорили, что лучше всего использовать сериализацию и десериализацию. Покажите как это можно сделать

    (я не профи, в таких моментах я дуб: Дерево хвойное, просто расскажите почему надо так и почему не надо так, как это влияет на производительность и т.д)
     
  2. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Последнее редактирование: 14 ноя 2022
  3. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Статичный синглтон сам по себе не является каким-то абсолютным злом, но зачастую используется неправильно и порождает много проблем со структурой проекта, которые позже придется долго и упорно искоренять.
    Стоит отметить, что экземпляр плагина в виде синглтона, на самом деле, скорей даже правильное его использование, но там есть проблемы с поддержкой такого варианта в будущем, особенно если соберешься расширять API проекта.
    В крайнем случае всегда можно использовать JavaPlugin.getPlugin(MyPlugin.class), хотя выглядит это очень некрасиво. Если нужен экземпляр третьего плагина, лучше через getServer().getPluginManager() (метод getServer() доступен у экземпляра твоего плагина; кроме того, класс Bukkit статично копирует каждый метод класса Server).
    Зато стабильно. Можешь, конечно, посмотреть в сторону фреймворков вроде Guice, но нужно учесть - постоянно создавать объекты с ним будет тяжело для сервера, но на включении плагина, или с какой-то большой периодичностью - проблем не будет. Ну, и вес итогового плагина увеличится (если только не будешь использовать libraries в plugin.yml)
    Не знаю, к чему это, если честно. Сериализация - процесс конвертации объекта в сохраняемый формат (байты, текст); десерализация, соответственно, сборка такого объекта обратно из байтов.
    На производительность как правило влиять не должно (если не пользоваться фреймворками, опять же).
     
    Последнее редактирование: 14 ноя 2022
  4. 0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Хочу внести свою лепту
    Кратко: Сингелтон считают анти-патерном потому что из за него очень трудно понять какой объект где используется, и из за этого сложнее простроить качественную структуру программы, если ты на начальной стадии изучения программирования то не стоит сейчас об этом задумывается, но вот если строить большую программу то уже не обойтись без правильной структуры и так далее
    Если структура программы качественно продумана то ее будет легко масштабировать(Дописывать чтото новое),
     
  5. Автор темы
    neverlessy

    neverlessy Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    neverlessy
    Всем спасибо
    Вроде слышал, что так тоже можно получать экземпляр класса, скорее всего я что-то напутал или мне приснилось, странно

    upd: да, перепутал понятия, почему-то запомнилось как "сериализуемый главный класс" :mad:
    upload_2022-11-14_9-7-31.png
     

Поделиться этой страницей