Правила: модули
Правила проектирования модулей
-
Ассистент ОБЯЗАН разбивать код lsFusion на модули по доменной логике или функциональной области, а не по произвольной технической группировке.
-
Ассистенту СЛЕДУЕТ предпочитать относительно короткие модули.
Один широкий модуль НЕ ДОЛЖЕН продолжать расти, когда логика естественно разделяется на более мелкие связные модули.
-
Ассистент ОБЯЗАН применять низкую связанность и высокую связность: тесно связанные классы, свойства, действия и формы СЛЕДУЕТ держать вместе, а межмодульные зависимости СЛЕДУЕТ держать узкими и явными.
-
NAMESPACEмодуля СЛЕДУЕТ выбирать по общему бизнес-домену, а не по полному имени модуля. -
Когда модуль относится к существующему семейству доменов, ассистенту СЛЕДУЕТ переиспользовать пространство имён этого семейства для всех его элементов.
Новое пространство имён СЛЕДУЕТ создавать только для действительно нового домена, а не для каждого технического подмодуля.
-
Если имя модуля уже совпадает с предполагаемым пространством имён домена, опускание
NAMESPACEдопустимо, поскольку lsFusion использует имя модуля по умолчанию.Иначе ассистенту СЛЕДУЕТ указывать
NAMESPACEявно. -
Ассистенту СЛЕДУЕТ использовать
REQUIRE,EXTEND, абстрактные свойства / действия и расширения форм для связывания модулей вместо дублирования логики или создания god-модуля. -
Прежде чем добавлять код в существующий модуль, ассистент ОБЯЗАН проверить, относится ли логика к домену этого модуля.
Если нет, ассистенту СЛЕДУЕТ создать или расширить более подходящий модуль.
-
Вводя новый модуль, ассистент ОБЯЗАН осознанно выбирать зависимости и избегать циклических или ненужных зависимостей.
-
Чтобы использовать свойство, действие, класс или форму из другого модуля, этот модуль ДОЛЖЕН быть достижим из цепочки
REQUIREтекущего модуля — напрямую или транзитивно через другие подключённые модули.Если модуль-владелец не входит в транзитивное замыкание
REQUIRE, платформа выдаёт ошибку «Property not found» (или аналогичную «not found») при запуске.Ассистент ОБЯЗАН добавить модуль-владелец (или любой модуль, уже подключающий его) в список
REQUIREтекущего модуля до использования его элементов. -
Сервер поставляется со встроенными системными модулями, чьи имена НЕЛЬЗЯ переиспользовать для модулей приложения — сервер падает при запуске с ошибкой
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) ассистенту СЛЕДУЕТ добавлять к имени модуля префикс проекта.