Webitel Types naming considerations
Або, чому ts-типи та enums сутностей системи в кодовій базі називаються саме так.
INFO
Також відомі як "Entities", userinfo.scope.classes, or WtType
WARNING
В цьому тексті, вжиті слова та терміни мають вкрай важливе значення. Деякі слова в повсякденному сприйнятті можуть бути дуже схожими, але в цьому контексті тонка різниця в їхньому сенсі може мати велике значення.
TLDR;
WtType– загальна назва для типів / класів / структур / сутностей / моделей (залежно від контексту) системи.WtCoreType– базові типи (User,Device,Contact...), які є в системі завжди.WtTypeExtension– розширенняWtCoreтипів (customполя).На бекенді, технічно, є окремою сутністю, повʼязаною з
Coreтипом (а не додавання полей до існуючогоCoreтипу).WtAdjunctType–customтипи на рівні домену (інсталяції продукту), які створюють користувачі.WtSysType– UnionWtCoreType | WtAdjunctType.
Конкретніше про предмет розгляду
Як назвати, скажімо:
... Основу (тип? клас?) записів (створених обʼєктів) користувачів у системі (
users)? Тобто, і розділ, і сутності розділу, і апішки, і права доступу?А як тоді назвати те саме, але для кастомного довідника, який динамічно створюють користувачі системи? Скажімо, довідника "Номери поштових відділень"?
Якщо це
ts-тип, то як його назвати, обʼєднати в ньому і перший, і другий випадок, для, скажімо, розрахунку прав доступу на певні сутності чи розділи?
WtCoreType: Базові типи
Базові, статичні, основні.
Ті, що існують не залежно від налаштувань системи, які входять в будь-яку систему та інсталяцію. Наприклад:
CalendarUserContactQueue- ...
TIP
Якщо називаємо в однині – це тип. Якщо називаємо в множині – це обʼєкти типу.
Чому саме "Core"?
Бо інші слова ("base", "main", "static") видались мені менш підходящими або більш універсальними.
WtTypeExtension: Розширення базових типів
Це кастомні додаткові поля, якими користувачі системи можуть розширювати типи. Це може бути додатковими полями Core типів, але можуть бути унікальними від інсталяції до інсталяції.
WtAdjunctType: Додаткові (Кастомні) типи
TIP
Adjunct – something that is not necessary in itself but adds to the convenience or performance of the main piece of equipment.
Таке незвичне (нетипове, кучеряве, екзотичне – you name it) слово просто для того, щоб бути достатньо специфічним і не займати таке розповсюджене та універсальне слово як "extension".
WtSysType: Обʼєднаний тип
Ну і обʼєднаний тип – такий собі Union Core та Adjunct типів. Цей юніон потрібен для того, щоб працювати з цими типами, абстрагуючись від того, чи то кастомний, чи кор тип. Наприклад, права доступу до них рахувати.
Чому саме Sys, а не System?
Щоб таким чином відрізнити і зарезервувати "Sys" під це використання, і щоб не плутати зі словом "system", яке може виникати в інших контекстах
А як називати компоненти?
Без префікса wt.
Бо цей префікс зарезервований для reusable-компонентів з ліби. Умовно, для кнопок чи інпутів.
Загальні думки
Чому не "object"/"обʼєкт"?
Тому що "обʼєкт" є конкретним екземпляром "типу".
Тобто, обʼєкт користувача з id=123 є екземпляром типу (класу) User.
Для чого префікс Wt?
Таким чином маркуємо, що це є частина Webitel, а не якісь лєві, інтеграційні чи абстрактні типи.
Чому назви такі довгі/хитрі/нетипові?
Тому що, вибираючи назву, треба:
- з одного боку, вибрати точну назву, яка вказує конкретно на те, що так називається.
- з іншого боку, по можливості, не "резервувати" під себе занадто загальні назви (скажімо, просто "Type", "Extension", ...). Бо ці слова є достатньо загальновживаними, щоб плутати наше специфічне значення цього слова з його загальним значенням.