Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


О Notes

Главная   Библиотека   О Notes

Как добиться качественного кода

LotusScript - мощный язык программирования в среде IBM Lotus Notes. Благодаря своей объектной модели, которая расширяется с выходом каждого нового релиза, он сильно облегчает жизнь разработчикам, позволяя реализовывать практически все механизмы, требующиеся в рамках применения платформы. Код, написанный на LotusScript, легко переносится между приложениями, что позволяет добиться повторного использования кода в значительных размерах. Среда разработки Lotus Domino Designer имеет удобный интерфейс, контроль синтаксиса "на лету", а также встроенный отладчик. Благодаря этим возможностям LotusScript является удобным средством реализации и весьма привлекателен для разработчиков. С другой стороны, как известно, с помощью микроскопа можно забивать гвозди. И в случае разработки приложений Notes на LS можно добиться обратных результатов, таких как медленно или нестабильно работающий код, неуловимые ошибки и прочая, и прочая...

Правило хорошего кода №1 - Option Declare
Позволяет избежать ошибок, связанных с опечатками и невнимательностью. Правило заключается в принудительном контроле за декларированием переменных.

Попробуйте найти ошибку:
Dim doc As NotesDocument
Dim textListItem As NotesItem
Dim newValues( 0 To 2 ) As String
newValues( 0 ) = "Bicycle"
newValues( 1 ) = "Train"
newValues( 2 ) = "Foot"

'создаем или получаем doc...
Set textListItem = New NotesItem ( doc, "Choices", newValue )
Call doc.Save( True, True )


Приведенный код корректен с точки зрения синтаксиса, и при сохранении агента не будет никаких сообщений об ошибке. Но при тестировании агента выяснится, что поле Choices обрабатываемого документа будет пустым или будет содержать что-то иное, нежели значения массива newValues. Поместив строчку Option Declare, разработчик избежит потери времени на понимание проблемы - при сохранении Domino Designer укажет на предпоследнюю строчку кода.

Правило хорошего кода №2 - "Сказано в морг, значит в морг"
LotusScript в отличие от многих прочих языков программирования позволяет разработчику обращаться с переменными очень вольно.

Неправильно:
Dim phone
Dim fname, lname as String

Правильно:
Dim phone as String
Dim fname as String, lname as String

Найдите ошибку:
Dim doc as NotesDocument
Dim phone as String
Dim fname
Dim lname
'создаем или получаем doc...
phone = doc.telephone(0)
fname = doc.firstname
lname = doc.lastname(0)
'еще несколько десятков строк кода
msgbox |Контактная информация:|+fname+| |+lname+|, |+phone

При сохранении агента никаких сообщений об ошибке не последует, но в момент запуска агента последняя строка вызовет сбой. Причиной является назначение переменной fname, декларированной как Variant, значения типа String array, а не String.

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

Пример кода:
enterage:
AgeString = Inputbox$("Введите ваш возраст", "Вопрос", "")
AgeNumber = Cint(AgeString)
If AgeNumber < 0 Or AgeNumber > 120 Then
Msgbox "Вы ошиблись при вводе?"
Goto enterage
End If
Msgbox "Вы ввели "+Cstr(AgeNumber)

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

С помощью констант тот же самый код может выглядеть следующим образом:
Const AGE_INPUT_QUESTION = "Введите ваш возраст"
Const AGE_INPUT_QUESTION_TITLE = "Вопрос"
Const AGE_INPUT_ERROR = "Вы ошиблись при вводе?"
Const AGE_MAX =120
Const AGE_MIN = 0

enterage:
AgeString = Inputbox$( AGE_INPUT_QUESTION , PROMPT_AGE_TITLE, "")
AgeNumber = Cint(AgeString)
If AgeNumber < AGE_MIN Or AgeNumber > AGE_MAX Then
Msgbox AGE_INPUT_ERROR
Goto enterage
End If
Msgbox "Вы ввели "+Cstr(AgeNumber)

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

Правило хорошего кода №4 - Изменяемые названия полей
LotusScript позволяет обращаться к полям документов как к атрибутам класса NotesDocument, но в условиях, когда один и тот же код используется в различных приложениях, это не совсем удобно. Предыдущее правило может применяться не только к переменным, но и к полям документов.

Пример:
LastName = Doc.LName(0)
FirstName = Doc.FName(0)


В случае, если в другом приложении по каким-либо причинам, поля, в которых хранятся имя и фамилия, имеют иные названия, придется модифицировать все строки кода, в которых упоминаются эти поля. В процессе подобных изменений легко допустить ошибки, которые не могут быть обнаружены с помощью правила №1 (Option Declare), так как аттрибут документа не является переменной и не описывается моделью классов LS.

Вот код, написанный с учетом правила №4:
Const FIRSTNAME_FIELD = "Fname"
Const LASTNAME_FIELD = "Lname"
LastName = Doc.GetItemValue(LASTNAME_FIELD)(0)
FirstName = Doc.GetItemValue(FIRSTNAME_FIELD)(0)


Таким образом, в случае изменения названия поля в приложении достаточно поменять единственную константу, а также мы застрахованы от опечаток в описании операций с полями благодаря совместному использованию правил №1 и №4.

Пример:
Const FIRSTNAME_FIELD = "Fname"
Const FIRSTNAME_PROMPT = "Введите имя"
Const LASTNAME_FIELD = "Lname"
Const LASTNAME_PROMPT = "Введите фамилию"

LastName = Inputbox$(LASTNAME_PROMPT, LASTNAME_TITLE, "")
FirstName = Inputbox$(FIRSTNAME_PROMPT, FIRSTNAME_TITLE, "")
Set Item = Doc.ReplaceItemValue(LASTNAME_FIELD, LastName)
Set Item = Doc.ReplaceItemValue(FIRSTNAME_FIELD, FirstName)


В своей статье Чак Коннел также указывает на желательность использования комментариев для описания кода, но это тема для отдельного материала, так как принципы работы над приложениями могут рассматриваться в свете опыта совместной разработки приложений в команде.

Материал подготовлен: С.Карандин
© Chuck Connel, http://www.chc-3.com/
Смотри также на Notesnet.ru: Десять заповедей по разработке приложений >>>
 
  Опубликовано — 04/25/2003 |    



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU