Перейти к основному содержимому
Версия: 7.0

Правила: модули

Правила проектирования модулей

  1. Ассистент ОБЯЗАН разбивать код lsFusion на модули по доменной логике или функциональной области, а не по произвольной технической группировке.

  2. Ассистенту СЛЕДУЕТ предпочитать относительно короткие модули.

    Один широкий модуль НЕ ДОЛЖЕН продолжать расти, когда логика естественно разделяется на более мелкие связные модули.

  3. Ассистент ОБЯЗАН применять низкую связанность и высокую связность: тесно связанные классы, свойства, действия и формы СЛЕДУЕТ держать вместе, а межмодульные зависимости СЛЕДУЕТ держать узкими и явными.

  4. NAMESPACE модуля СЛЕДУЕТ выбирать по общему бизнес-домену, а не по полному имени модуля.

  5. Когда модуль относится к существующему семейству доменов, ассистенту СЛЕДУЕТ переиспользовать пространство имён этого семейства для всех его элементов.

    Новое пространство имён СЛЕДУЕТ создавать только для действительно нового домена, а не для каждого технического подмодуля.

  6. Если имя модуля уже совпадает с предполагаемым пространством имён домена, опускание NAMESPACE допустимо, поскольку lsFusion использует имя модуля по умолчанию.

    Иначе ассистенту СЛЕДУЕТ указывать NAMESPACE явно.

  7. Ассистенту СЛЕДУЕТ использовать REQUIRE, EXTEND, абстрактные свойства / действия и расширения форм для связывания модулей вместо дублирования логики или создания god-модуля.

  8. Прежде чем добавлять код в существующий модуль, ассистент ОБЯЗАН проверить, относится ли логика к домену этого модуля.

    Если нет, ассистенту СЛЕДУЕТ создать или расширить более подходящий модуль.

  9. Вводя новый модуль, ассистент ОБЯЗАН осознанно выбирать зависимости и избегать циклических или ненужных зависимостей.

  10. Чтобы использовать свойство, действие, класс или форму из другого модуля, этот модуль ДОЛЖЕН быть достижим из цепочки REQUIRE текущего модуля — напрямую или транзитивно через другие подключённые модули.

    Если модуль-владелец не входит в транзитивное замыкание REQUIRE, платформа выдаёт ошибку «Property not found» (или аналогичную «not found») при запуске.

    Ассистент ОБЯЗАН добавить модуль-владелец (или любой модуль, уже подключающий его) в список REQUIRE текущего модуля до использования его элементов.

  11. Сервер поставляется со встроенными системными модулями, чьи имена НЕЛЬЗЯ переиспользовать для модулей приложения — сервер падает при запуске с ошибкой module '<имя>' has already been added. Встроенные имена: System, Utils, UserEvents, Scheduler, Email, Time, Reflection, Security, Service, Icon, Authentication, SystemEvents, Word, WebSocket, Integration, Profiler, SQLUtils, ProcessMonitor, DefaultData, Image, Printer, Numerator, Chat, Eval, I18n, Com, Sound, Backup, OpenCV, Geo, Historizable, Schedule, Document, QZTray, Excel, Hierarchy, RabbitMQ, MasterData, Messenger, Whatsapp, Skype, Telegram, Viber, Slack.

    Для типовых доменных имён из этого списка (MasterData, Document, Schedule, Numerator) ассистенту СЛЕДУЕТ добавлять к имени модуля префикс проекта.