Интересует мнение сообщества о использовании глобальных методов. Вот у нас в команде один программист создал десяток глобальных методов для доступа к ресурсам (типа getTexture(), getXML(), getJSON()). Я же склоняюсь к тому, что это полная жесть, и надо делать так: Assets.getTexture()… и т.д. Кстати говоря, внутри этой глобальной getTexture() как раз находится Assets.getTexture(). Такие дела.

Пример глобального метода:

import utils.assets.getTexture();    // Импорт глобального метода

public function Main()
{
    var texture:Texture = getTexture("myTexture.png");
}


Я считаю, что это нарушает принципы ООП, усложняет дебаг расширяя стек при ошибках, и вообще — непрофессионально и по-дилетантски.
Как вы относитесь к глобальным методам?

Проголосовало 88 человек. Воздержалось 47 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (10)


  1. WeslomPo
    26.08.2015 09:42

    Это же жесть в чистом виде. Метод который взялся ниоткуда и делает непонятно что. Без компилятора не разберешься.

    Еще это идет в разрез используемого паттерна программирования в Unity, а приведённые в пример методы названы вопреки принятой конвенции.


  1. MaximChistov
    26.08.2015 09:54

    Удачи в тестировании таких методов когда они еще внутри себя другие статические зовут :D


  1. decore
    26.08.2015 10:02
    -2

    В использовании глобальных методов нет ничего плохого. Например, есть проект, где в десятке классов существуют методы с одинаковым названием. Можно запутаться и накосячить, но есть неймспейсы, которые изолируют их друг от друга. Я стараюсь не использовать глобальных методов, но если придется вызвать метод типа: App.Networks.Connections.Protocols.HTTP.GetPort()? Иногда вызов таких методов в коде, на каждой третьей строке. И читать такой код, одно «наслаждение». Так что к использованию глобальных методов нужно просто правильно подходить.


    1. Crash512 Автор
      26.08.2015 10:12

      App.Networks.Connections.Protocols.HTTP.GetPort()

      Это и есть тот самый «крайний случай».


  1. SergeyGrigorev
    26.08.2015 10:02

    В обычном коде не применяю никогда, но вот в юнит-тестах, повсюду импортированы методы.

    Например
    import static org.testng.Assert.*,

    и затем в коде тестов
    assertTrue(tokenizer.hasMoreElements());
    assertEquals(tokenizer.nextElement(), «test1»);


  1. impwx
    26.08.2015 10:06
    +2

    Это пост для Тостера, а не для Хабра.


    1. Crash512 Автор
      26.08.2015 10:13

      Мои извинения. Я как-то по-старинке на Хабр написал… На будущее учту.


  1. dim_s
    26.08.2015 10:18

    На счет тестирования статических методов, для Java например есть либы, которые умеют делать моки и для статики. Я использую статические методы в основном для утилитных классов или как дополнительные статические методы-конструкторы для класса.


    1. MaximChistov
      26.08.2015 10:36

      есть либы, которые умеют делать моки и для статики

      Вот только они в десятки-сотни раз медленнее того же мокито и ломают байткод


  1. APXEOLOG
    26.08.2015 10:31

    Всегда предпочитаю вариант

    Assets.getTexture()

    А вообще когда-то давно на хабре была статья, после которой я завел себе статический класс с util-функциями и использую его в большинстве проектов, периодически докладывая туда полезные функции, например
    ALS.printObjects(Object… objs)