Skip to content

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 типу).

  • WtAdjunctTypecustom типи на рівні домену (інсталяції продукту), які створюють користувачі.

  • WtSysTypeUnion WtCoreType | WtAdjunctType.

Конкретніше про предмет розгляду

Як назвати, скажімо:

  • ... Основу (тип? клас?) записів (створених обʼєктів) користувачів у системі (users)? Тобто, і розділ, і сутності розділу, і апішки, і права доступу?

  • А як тоді назвати те саме, але для кастомного довідника, який динамічно створюють користувачі системи? Скажімо, довідника "Номери поштових відділень"?

  • Якщо це ts-тип, то як його назвати, обʼєднати в ньому і перший, і другий випадок, для, скажімо, розрахунку прав доступу на певні сутності чи розділи?

WtCoreType: Базові типи

Базові, статичні, основні.

Ті, що існують не залежно від налаштувань системи, які входять в будь-яку систему та інсталяцію. Наприклад:

  • Calendar
  • User
  • Contact
  • Queue
  • ...

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", ...). Бо ці слова є достатньо загальновживаними, щоб плутати наше специфічне значення цього слова з його загальним значенням.