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

Стартап Почему надо использовать DI вместо статической ссылки на Main класс ?

Тема в разделе "Разработка плагинов для новичков", создана пользователем hyndorik, 8 май 2018.

  1. Автор темы
    hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну вообще в такой системе по-любому будет враппер над бакитовским шедулером. Бакитовские шедулеры убогие же довольно. Бакитовский шедулер в такой системе будет скорее всегда запихнут в ExecutorService, и его скорее всего и будут передавать
     
  2. TheZefirrkka

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

    Баллы:
    76
    Это один из самых изичных вопросов.
     
  3. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Неплохо бы доработать тему и закрепить.
     
  4. Belo4kaProgramist

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

    Баллы:
    61
    Имя в Minecraft:
    Belo4kaProgramist
    а если нужно например много зависимостей, например DatabaseManager, MSGManager и CFGManager, то нужно так?
    Код:
    private JavaPlugin plugin;
    private MSGManager msgmanager;
    private CFGManager cfgmanager;
    
    public Events(JavaPlugin plugin, MSGManager msgmanager, CFGManager cfgmanager) {
        this.cfgmanager = cfgmanager;
        this.msgmanager = msgmanager;
        this.plugin = plugin;
    }
    }
     
  5. Автор темы
    hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Если у тебя слишком много зависимостей то ты не до-конца прочитал мою тему - upload_2018-5-9_0-20-22.png
    Ну тот код который ты кинул сейчас там 3 зависимости, вполне нормально
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    К чему себе жизнь усложнять?

    Код:
        private Main plugin;
    
        public EventListener(Main plugin) {
            this.plugin = plugin;
        }
    this.plugin.getOne();
    this.plugin.getTwo();
     
  7. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Теперь класс Events получил зависимость от example.plugin1.Main и не может быть скопипащен в plugin2.
    Так сказать, он завязан на большее число зависимостей, нежели ему на самом деле нужны.
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    И что? От этого ему хреного не стало.
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вот смотри. есть к примеру класс PacketBuffer. Там куча методов, они никогда все вместе не юзаются одним классом. Но это не мешает ему быть. Дискуссия вообще ни о чем тут.
     
  10. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Нарушен принцип единственной ответственности.
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Сирьезно? Тогда весь майнкрафт его нарушает. Геймовер.
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    А теперь представь, что у меня овер90 классов ивентов и всем нужны разные методы Main. Мне им лепить 90 интерфейсов? Чет как то НЕТ.
     
  13. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Каждому классу ивента необходимы лишь свои компоненты и класс не должен знать ничего о том, что ему не нужно. Каждому классу просто нужно передать то, что он должен использовать, не больше, не меньше.
     
  14. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Ему не стало, в данный момент. Стало хуже тому программисту, который это потом захочет переиспользовать. Грустно знать, что ты уже написал код, который делал нужную тебе работу, но не можешь его просто взять. Либо тяжелый рефакторинг.
     
  15. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Нет необходимости делать им интерфейсы, если они не требуются друг другу. Методы из Main -- о каких речь? Если баккитовские, сужаем до JavaPlugin (или Plugin, по возможности), если свои, то тут тоже много вариантов к действиям.
     
  16. iD3LSY

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

    Баллы:
    76
    В чем проблема? :/

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

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

    Баллы:
    61
    Имя в Minecraft:
    Belo4kaProgramist
    Я чет запутался. То есть, например, есть у меня класс команды какой нибудь. Мне там нужны такие классы как: CFGManager, MSGManager, CheckerManager, BuildManager и объект JavaPlugin, возможно еще классы будут. Вот если они все необходимы и я их передам, будет ли это нарушением солид принципов?
     
  18. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Ты должен разбить класс обработки команд на архитектуру классов и каждый компонент получит только то, что будет использовать.
     
  19. Exception_Prototype

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

    Баллы:
    96
    А можешь привести пример того, что ты написал?
     
  20. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    upload_2018-5-9_13-1-34.png
     

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