Глобальные переменные

Тема в разделе "Lotus - Программирование", создана пользователем Omh, 18 янв 2008.

  1. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Уважаемые программисты!

    Потрудитесь ответить на мой вопрос и, если можно, обосновать.

    Насколько оправданны глобальные переменные вообще и на уровне формы в частности.
    Например, иметь на форме глобально ws, uidoc, doc, session, db.
    Оправданно ли это или засирание кода?

    Я пока не буду высказывать свою точку зрения, дабы никого не склонить в какую-либо сторону.
    Спасибо!
     
  2. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Для: Omh
    Я выносил в глобальные переменные session и db...
    Встретился с таким глюком - глобальные переменные заполнялись через Initialize. Если использовать метод из данной библиотеки при помощи execut'a, то Initialize не запускался... по-моему так

    Вобщем, по моему мнению глобальные переменные лучше не использовать
     
  3. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Вот ещё был такой случай (не понимаю сейчас был ли это глюк или всё-таки понастоящему).
    LS'ный Shared Action юзал переменную doc, которая была задекларена на форме, куда он был помещён.
    Т.е. на рантайме он подхватывал этот объект и начинал с ним работать.

    Помню тогда хотелось вырвать руки программеру создавшему это.
    Правда, сейчас мне кажеться, что это невозможно.
    Но там скрипты были 1999 года :)
     
  4. Azrael

    Azrael Гость

    <!--QuoteBegin-Omh+18:01:2008, 18:32 -->
    <span class="vbquote">(Omh @ 18:01:2008, 18:32 )</span><!--QuoteEBegin-->Насколько оправданны глобальные переменные вообще и на уровне формы в частности.
    [snapback]94126" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    ИМХО, в топку...
    Во-первых, создавать себе лишние проблемы при работе с LS-библиотеками (особенно писанными не Вами)
    Во-вторых, ИМХО, лишний разброс кода, спустя некоторое время, разбираться даже в своем же коде будет тяжко,а в чужом - так вообще смерть...
     
  5. Yakov

    Yakov Гость

    Согласен с Azrael. Глобальные переменные очень сильно усложняют жизнь при сопровождении.
    Создание экземпляров NotesSession и NotesUIWorkspace не стоит ничего (менее 1/100000 секунды на средней машине), все переменные ссылаются на один объект:
    Код (Text):
    Dim session1 As New NotesSession()
    Dim session2 As New NotesSession()
    Print session1 Is session2 'True
    Я считаю, что если вдруг возникла необходимость использовать глобальную переменную, значит в проекте что-то неправильно. Пользуйтесь параметрами. Если их много - создавайте классы.
    Казалось бы, можно использовать глобальную Public-переменную для Singleton'а, но гораздо удобней использовать Property Get или функцию, которая, к тому же, позволит использовать "ленивое" создание объекта:
    Код (Text):
    Private singleton As SuperPuperClass
    Public Function getInstance()
    If singleton Is Nothing Then Set singleton = New SuperPuperClass()
    Set getInstance = singleton
    End Function
    <!--QuoteBegin-Omh+18:01:2008, 19:30 -->
    <span class="vbquote">(Omh @ 18:01:2008, 19:30 )</span><!--QuoteEBegin-->Правда, сейчас мне кажеться, что это невозможно.
    [snapback]94143" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Еще как возможно! Не раз встречал такое в СЭД не-скажу-название. Работает. :)
     
  6. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    никогда и никаких проблем с глобальными переменными не имел.. всякая глобальная переменная локальна в своей области применения.. разумеется нужно писать код аналогичный в приведенном выше посте, с этим я полностью согласен, структурность и логичность -- большая читабельность и понятность..
     
  7. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Просто тут небольшой разгорелся небольшой спор на полезность применеия глобальных переменных.
    Я - сугубо против.
    Единственный случай, где, кмк, не обойтись без глобальных переменных это в процедуре, вызываемой конструкцией вида
    Код (Text):
    On Event PostDOMParse from DOMPArser Call SuperProcedure
    Вот в эту самую SuperProcedure нельзя передать параметер.

    А насчёт того, что читабельность чужого кода сильно понижаеться - это точно.

    Кстати ни разу не встречался с необходимость передавать объекты типа NotesSession или NotesUIWorkspace через параметры: нафига? ведь всегда можно задекларить новый...
     
  8. Sandr

    Sandr Гость

    Иногда использую глобальные переменные, но это очень редко.. по ситуации...
     
  9. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Обалдеть, теме уже 2 года почти. :D

    За последнее время много нового и умного народа пришло в форум.
    Может у кого-нибудь есть мнение по теме?
    Хотелось бы выслушать бест практисис из вашего опыта.
    Спасибо!

    P.S. Эх, это тема была навеяна в своё время тем, что сменил работу и на новой работе использование глобальных переменных было возведено в ранг обязательных условий. Я был ошарашен.
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    чем больше область видимости переменной тем хужее!
    в LS иногда без глобальной переменной не обойтись, вот только тогда их и юзать.
     
  11. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
  12. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    turumbay
    :first:
     
  13. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    товарищи а подскажите мне одну такую штуку
    а как обьявить самую глобальную переменную в лотусе? :D
    Пример
    заходит юзер в базу а у него тут тыц и спрашивается пин код на его карточку доступа
    и чтобы не переспрашивать его по 20 раз пока он там виды щелкает, формы открывает, хотелось бы засунуть в глобальную переменную
    попрошу не путать с профилями, инишками :)
     
  14. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    ToxaRat
    гдета была тема про обьекты глобальные ....

    или тут или на нотес.ру


    не могу найти ссылку
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ищи про очереди сообщений
     
  16. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.078
    Симпатии:
    300
    Omh
    про UI объекты - яб даже не спрашивал ;)
    малевич будет неуловимым - мастера индусского кодирования не позволят пройти мимо :D
    кол-во сессий яб берёг тока на случай DIIOP - они там типа грузят сервак
    да врядли они нужны перманентные: таймауты, обрывы связи - полюбасу им конец
    в сухом остатке, из перечисленного: doc, db
    но этож бэкенд и смысл их глобализации, для меня, сомнителен...

    др. словами - область применения глобальных LDN объектов в распределённой, многозадачной, многопоточной среде - спорна

    есть языки программирования, где это - вовсе абсурд (глобальная переменная, порой и переменные - не переменные ;) ) - процедурные...
    одним из кот. является erlang, кот. в с вою очередь используется в CouchDB...

    кто не знает старину Каца ;) ?!
    продолжателя реализации/имплементации Нотуса, под крылом апача:
    http://couchdb.apache.org/
    и никаких индусских UI :)
     
  18. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Глобальные переменные используются. Вопрос в умении их использовать.
    Здесь в тексте и комментах это обсуждали.
     
  19. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    VladSh
    О, я это читал ещё когда пешком под стол ходил.
    Не знал, что это ты.
    Проникся :)
     
  20. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Да ладно тебе))) Тут все прикольные челы! Я столько нового узнал... Очень много толковых людей! Хоть дизайн и мрачноватый, но классная конфа, гораздо лучше, чем теперь Интертраст. Радует, что есть ещё место, где все могут вот так собраться... заходишь на форум и каждый раз что-то интересное для себя выносишь. :)
     
Загрузка...

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